大家好,我最近发现我的一个表索引文件比数据文件还要大,千万级数据,请问这正常否资料长度:951.00 MB
索引长度:1480.27 MB
资料空闲:3452960768
平均列长度: 138 bytes
建表:使用hibernate,*id都是外键。-- Table "itemresult" DDLCREATE TABLE `tj_itemresult` (
  `itemresultid` bigint(20) NOT NULL AUTO_INCREMENT,
  `saleresultid` bigint(20) DEFAULT NULL,
  `personid` bigint(20) DEFAULT NULL,
  `itemid` bigint(20) DEFAULT NULL,
  `bookid` bigint(20) DEFAULT NULL,
  `resultstring` varchar(500) DEFAULT '',
  `resultdouble` varchar(20) DEFAULT '',
  `resulttype` smallint(6) DEFAULT '0',
  `iscomplete` smallint(6) DEFAULT '0',
  `tjtime` varchar(20) DEFAULT NULL,
  `resultpic` varchar(20) DEFAULT '',
  `issend` smallint(6) DEFAULT '0',
  `predate` varchar(20) DEFAULT '',
  `comdate` varchar(20) DEFAULT NULL,
  `comstatus` smallint(6) DEFAULT '0',
  `advice` varchar(400) DEFAULT NULL,
  `df` smallint(6) DEFAULT '0',
  `tjdate` varchar(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`itemresultid`),
  KEY `itemresultid` (`itemresultid`),
  KEY `saleresultid` (`saleresultid`),
  KEY `itemid` (`itemid`),
  KEY `personid` (`personid`),
  KEY `bookid` (`guidebookid`),
  KEY `resulttype` (`resulttype`),
  KEY `comstatus` (`comstatus`),
  KEY `df` (`df`),
  KEY `tjdate` (`tjdate`)
) ENGINE=InnoDB AUTO_INCREMENT=8451860 DEFAULT CHARSET=gbk;

解决方案 »

  1.   

    索引文件比数据文件大很正常。假设表 t1 (id int primary key) 则其索引文件肯定比数据文件大
      

  2.   

    建这么多Key, 索引文件不大才怪呢。以空间换时间,多点空间也不为过。
      

  3.   

    这个当然有可能啦
    因为索引也是以一定数据结构存储的(你可以看看btree的结构)
      

  4.   

    Table does not support optimize, doing recreate + analyze insteadNavicat对表进行优化的时候,上面这一句话是什么意思呢?
      

  5.   

    你的表不支持optimize方式,建议你用重建表并执行analyze方式替代