MySQL索引优化

时间:2015-09-01 04:55:06

标签: mysql indexing

我有以下表格 - '元素'

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万行。

1 个答案:

答案 0 :(得分:0)

classesTINYTEXT更改为VARCHAR(255)(或更合理的尺寸),然后

INDEX(tag_name, depth, classes)

以任何顺序列。我遗漏了rowstatus因为它闻起来像一个可能会改变的柱子。 (无论如何,一个标志不会给索引增加太多。)

您不能在索引中包含TEXTBLOB列。而且做一个“前缀”索引是不值得的。

由于PRIMARY KEY UNIQUE密钥,DROP INDEX eid_UNIQUE

是否有理由为所有字符字段选择“binary”/“utf8_bin”?