独立的列
在进行查询的时候, 索引列不能是表达式的一部分, 也不能是函数的参数, 否则无法使用索引.
例如下面的查询不能使用actor_id列的索引:
SELECT actor_id from sakila.actor WHERE actor_id + 1 = 5;
多列索引
在需要使用多个列作为条件进行查询时, 使用多列索引比使用多个单列索引性能更好. 例如:
SELECT file_id, actor_id FROM sakila.film_actor WHERE actor_id = 1 AND file_id = 1;
索引列的顺序
让选择性最强的索引放在前面, 索引的选择性是指: 不重复的索引值和记录总数的比值. 选择性越高, 查询效率越高.
前缀索引
对于BLOB, TEXT和VARCHAR类型的列, 必须使用前缀索引, 只索引开始的部分字符.
对于前缀长度的选取需要根据索引选择性来确定.
覆盖索引
索引包含所有需要查询的字段的值.
具有以下优点: