应该添加哪些索引来加速大量InnoDB表的查询?

时间:2011-09-29 15:42:19

标签: mysql optimization indexing

这是我的表:

CREATE TABLE `letters` (
  `a` bigint(20) unsigned NOT NULL,
  `b` bigint(20) unsigned NOT NULL,
  `c` bigint(20) unsigned NOT NULL,
  `d` bigint(20) unsigned NOT NULL,
  `e` bigint(20) unsigned NOT NULL,
  PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
  • 该表将有大约1亿行。
  • 可以查询每列;每列都可以参考。例如。:
    • SELECT [any column] FROM letters WHERE [any / any other column] IN([subquery or list]);

我的问题:我应该添加哪些索引来加快上述格式的查询速度? (另外,如果可能的话,请尝试描述'为什么'它/它们应该添加,以便我可以从你的答案中学习。)

谢谢!

- 额外信息:插入将定期发生(每秒一些/少数),但选择查询将更频繁地发生。

2 个答案:

答案 0 :(得分:1)

由于任何列都可以出现在WHERE子句中,您需要为每个列添加一个索引,但字段 a 除外,因为它已经是PRIMARY KEY,因此已经编入索引

UPDATE :至于后续讨论,Poodlehat指出 e 列具有较低的索引选择性,即“不同值的比率”索引列/列到表中的记录数“。因此,目前尚不清楚在列 e 上添加索引是否有助于或减慢查询速度。因此,卢卡斯将尝试实验并希望将结果分享给我们。

答案 1 :(得分:0)

我认为你需要在a上有一个唯一索引(或者它应该是主键),绝对是b,c,d上的索引(在每个上)。不需要e上的索引(它不会被使用,因为你说它只有15个不同的值)