Mysql索引失效

Mysql索引失效

1.最左前缀原则(复合索引)
	如果有一个 2 列的索引 (col1, col2),则已经对 (col1)、(col1, col2) 上建立了索引.
	如果有一个 3 列索引 (col1, col2, col3),则已经对 (col1)、(col1, col2)、(col1, col2, col3) 上建立了索引.
	特殊情况
		头在中间断头有效 头不在都无效
		头或者中间的索引因某些情况(例如9)失效后面全失效
2.left join 连接字段数据类型(int 和 vachar)或者两个表字符编码不一样
3.like 以%开头(对大的文本进行搜索使用全文索引)
4.or语句前后没有同时使用索引(or左右查询字段只有一个是索引,该索引失效)
5.隐式转化(如varchar不加单引号的话可能会自动转换为int型)
6.在索引列上使用 IS NULL 或 IS NOT NULL操作
7.对索引字段进行计算和函数操作
8.如果MySQL估计使用索引比全表扫描更慢,则不使用索引
9.NOT IN != 和<>操作(NOT IN 和 != 可以用NOT EXISTS代替 id<>3则可使用id>3 or id<3来代替)

Mysql-Explain

type
	ALL < index < range < ref(多表的 join 查询, 针对于非唯一或非主键索引) < eq_ref(前表的每一个结果, 都只能匹配到后表的一行结果) < const < system
	ALL 类型因为是全表扫描, 因此在相同的查询条件下, 它是速度最慢的.
	而 index 类型的查询虽然不是全表扫描, 但是它扫描了所有的索引(select 索引 from table), 因此比 ALL 类型的稍快.
	后面的几种类型都是利用了索引来查询数据, 因此可以过滤部分或大部分数据, 因此查询效率就比较高了.
发布了15 篇原创文章 · 获赞 1 · 访问量 675
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览