1、独立的列
如果查询中的列不是独立的,则 MYSQL就不会使用索引。“独立的列”是指索引列不能是表达式的一部分,也不能是函数的参数。
例如下面的age列:
SELECT age
FROM tbl_emp
WHERE age + 1 = 22
2、多列索引
在需要使用多个列作为条件进行查询时,使用多列索引比使用多个单列索引性能更好。例如下面的语句中,最好把 deptId 和 age 设置为多列索引。
SELECT deptId,age
FROM tbl_emp
WHERE deptId = 1 AND age = 27
3、索引列的顺序
让选择性最强的索引列放在前面,索引的选择性是指: 不重复的索引值和记录总数的比值。最大值为 1,此时每个记录都有唯一的索引与其对应。选择性越高,查询效率也越高。
4、 前缀索引
对于 BLOB、TEXT 和 VARCHAR 类型的列,必须使用前缀索引,只索引开始的部分字符。 对于前缀长度的选取需要根据索引选择性来确定。
5、覆盖索引
如果一个索引包含所有需要查询的字段的值,我们就称之为“覆盖索引”。
具有以下优点:
- 索引条目通常远小于数据行大小,所以如果只需要读取索引,那 MYSQL就会极大地减少数据访问量。
- 一些存储引擎如 MyISAM在内存中只缓存索引,数据则依赖于操作系统来缓存,因此要访问数据需要一次系统调用,这可能会导致严重的性能问题。
- 对于 InnoDB 引擎,若辅助索引能够覆盖查询,则无需访问主索引。
6、索引优化口诀
全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算,范围之后全失效;
LKE百分写最右,覆盖素引不写星;
不等空值还有or,索引失效要少用;
VAR引号不可丢,SQL高级也不难!