我有以下表格 - '元素'
CREATE TABLE `element` (
`eid` bigint(22) NOT NULL AUTO_INCREMENT,
`tag_name` varchar(45) COLLATE utf8_bin DEFAULT NULL,
`text` text COLLATE utf8_bin,
`depth` tinyint(2) DEFAULT NULL,
`classes` tinytext COLLATE utf8_bin,
`webarchiver_uniqueid` int(11) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`updated` datetime DEFAULT NULL,
`rowstatus` char(1) COLLATE utf8_bin DEFAULT 'A',
PRIMARY KEY (`eid`)
) ENGINE=InnoDB AUTO_INCREMENT=12090 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
上面给出了列详细信息和当前索引详细信息。此表中几乎90%的查询都是:
select * from element
where tag_name = 'XXX'
and text = 'YYYY'
and depth = 20
and classes = 'ZZZZZ'
and rowstatus = 'A'
在此表上创建索引的最佳方法是什么?该表有大约6万行。
答案 0 :(得分:0)
将classes
从TINYTEXT
更改为VARCHAR(255)
(或更合理的尺寸),然后
INDEX(tag_name, depth, classes)
以任何顺序列。我遗漏了rowstatus
因为它闻起来像一个可能会改变的柱子。 (无论如何,一个标志不会给索引增加太多。)
您不能在索引中包含TEXT
或BLOB
列。而且做一个“前缀”索引是不值得的。
由于PRIMARY KEY
是UNIQUE
密钥,DROP INDEX eid_UNIQUE
。
是否有理由为所有字符字段选择“binary”/“utf8_bin”?