一、创建索引
1、建议字段
1)where 判断的字段
2)order 排序的字段
3) join 的(on)字段
2、不建议字段
1)区分度低的字段
例如:性别
原因:离散度太低,导致扫描行数过多
2)频繁更新的字段
原因:页分裂
3)随机无序的字段
例如:身份证、UUID
原因:无序,分裂
二、索引失效
1、索引列上使用 函数 (replace\SUBSTR\CONCAT\sum count avg)、表达式、计算(+ - * /)
explain SELECT * FROM user where id+1 = 4;
2、字符串不加引号,出现隐式转换
explain SELECT * FROM user where name = 136;
explain SELECT * FROM user where name = '136';
3、like 条件中前面带%
explain select *from user where name like 'wang%';
explain select *from user where name like '%wang';
4、负向查询:not like
-- NOT LIKE 不能使用索引
explain select *from user where user not like 'wang'
-- != (<>)和 NOT IN 在某些情况下可以使用索引
explain select *from employees where emp_no not in (1) ;
explain select *from employees where emp_no <> 1;
三、索引个数
索引的个数不要过多。
原因:浪费空间,更新变慢。
四、单列索引、联合索引
创建复合索引,而不是修改单列索引