SQL 06 - 索引优化
Contents
索引优化
独立的列
在进行查询的时候, 索引列不能是表达式的一部分, 也不能是函数的参数, 否则无法使用索引.
例如下面的查询不能使用actor_id列的索引:
1
SELECT actor_id from sakila.actor WHERE actor_id + 1 = 5;
多列索引
在需要使用多个列作为条件进行查询时, 使用多列索引比使用多个单列索引性能更好. 例如:
1
SELECT file_id, actor_id FROM sakila.film_actor WHERE actor_id = 1 AND file_id = 1;
索引列的顺序
让选择性最强的索引放在前面, 索引的选择性是指: 不重复的索引值和记录总数的比值. 选择性越高, 查询效率越高.
前缀索引
对于BLOB, TEXT和VARCHAR类型的列, 必须使用前缀索引, 只索引开始的部分字符.
对于前缀长度的选取需要根据索引选择性来确定.
覆盖索引
索引包含所有需要查询的字段的值.
具有以下优点:
- 索引通常远小于数据行的大小, 只读索引能大大减少数据访问量.
- 一些存储引擎(例如MyISAM)在内存中只存缓存索引, 而数据库依赖于操作系统来缓存. 因此, 只访问索引可以不使用系统调用.
- 对于InnoDB引擎, 若辅助索引能够覆盖查询, 则无需访问主索引.