索引优化

联合索引第一个字段如果是范围查询则不会走索引

如果第一个查询条件用范围查询,那么MySQL会以为你查询的表数据比较多,那么它就会进行全表扫描而不进行索引,,但是如果第一个查询条件是主键范围查询的话,它依旧会走索引,不过在开发中应该不需要进行主键范围查询。
主键范围查询

EXPLAIN SELECT * FROM `employees` WHERE id > 20 AND age = 20

image
如果使用别的字段进行范围查询的话则不会走索引

EEXPLAIN SELECT * FROM `employees` WHERE name > "" and  age > 20

image
如果进行相等查询的话可以正常走索引

EXPLAIN SELECT * FROM `employees` WHERE name = "" and  age > 20

image
force index强制使用索引
可以使用force index来强制表中字段走explain possible key的索引字段idx_name_age_position
image
如下所示

EXPLAIN SELECT * FROM `employees` force index(idx_name_age_position)  WHERE name > "li" and  age > 20;

但是MySQL走索引不一定比全表扫描快,有的时候,MySQL经过优化,全表扫描会比走索引快一些,全表扫描没有进行回表,反而比走索引快些。
走索引前查询需要0.360S
image
走索引后反而变慢了
image

or和in不一定后走索引

or和in,如果数据量不大则不会走索引,MySQL会根据表数据进行统计,如果数据量少的话,直接全表扫可能还快些,不然走索引之后还得回表扫描才能拿到数据
例如有两张相同的表,不同之处在于一张表数据多,一张表数据少,
如果进行查询时,数据少的表是没有走索引的:

EXPLAIN SELECT * FROM employees 

image
而数据多的表就可以直接走索引进行查询。

posted @   RainbowMagic  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示