日期:2014-05-16  浏览次数:20847 次

索引应该有多大?
大家好,我最近发现我的一个表索引文件比数据文件还要大,千万级数据,请问这正常否

资料长度:951.00 MB
索引长度:1480.27 MB
资料空闲:3452960768
平均列长度: 138 bytes


建表:使用hibernate,*id都是外键。

-- Table "itemresult" DDL

CREATE 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;


------解决方案--------------------
索引文件比数据文件大很正常。

假设表 t1 (id int primary key) 则其索引文件肯定比数据文件大
------解决方案--------------------
建这么多Key, 索引文件不大才怪呢。以空间换时间,多点空间也不为过。
------解决方案--------------------
这个当然有可能啦
因为索引也是以一定数据结构存储的(你可以看看btree的结构)
------解决方案--------------------
你的表不支持optimize方式,建议你用重建表并执行analyze方式替代