一、索引失效是什么?
示例:创建的索引,但查询的时候没有使用索引来查询,(可以使用explain 语句查看,根据key 列的值判断)。
-- 例:
explain select * from student where sid= '1';
-- +----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| 1 | SIMPLE | student | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
+----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
1.最左前缀原则。
当创建的是联合索引,查询条件列要包含索引的第一个列(即最左的列),否则索引会失效。
如果跳过中间的字段,索引会部分失效。
二.索引失效
(1) 索引列进行了运算。
(2)字符类型数据未加 ‘’ , 索引失效。
(3)查询条件 使用了 != 、 < 、 > 等索引查询范围 右侧(列)的索引失效。
(4)模糊查询 , 查询条件在前加 % 如 :like ‘%zhang’, 索引失效。
(5) or 条件连接的两个列 必须都得索引列,不然索引失效。
(6)数据分布影响,当MySQL评估认为,全表扫描比索引快时,索引失效。