索引应该有多大?
大家好,我最近发现我的一个表索引文件比数据文件还要大,千万级数据,请问这正常否
资料长度: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方式替代