Welcome to aparke’s blog!
单表使用索引及常见索引失效
案例(索引失效)
删除索引函数
CALL proc_drop_index("learning","emp") |
1.全职匹配我最爱 索引没有失效,正常按照顺序创建索引
EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30 |
2.最佳左前缀法则
#如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。 |
3.不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
CREATE INDEX idx_name ON emp(NAME) |
4.存储引擎不能使用索引中范围条件右边的列
#建立索引 |
5.mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描
CREATE INDEX idx_name ON emp(NAME) |
6.is not null 也无法使用索引,但是is null是可以使用索引的
CREATE INDEX idx_age ON emp(age) |
7.like以通配符开头(‘%abc…’)mysql索引失效会变成全表扫描的操作
CREATE INDEX idx_name ON emp(NAME) |
8.字符串不加单引号索引失效
CREATE INDEX idx_name ON emp(NAME) |
总结
假设index(a,b,c) |
使用索引建议
1. 对于单键索引,尽量选择针对当前query过滤性更好的索引 |