索引优化
联合索引第一个字段如果是范围查询则不会走索引
如果第一个查询条件用范围查询,那么MySQL会以为你查询的表数据比较多,那么它就会进行全表扫描而不进行索引,,但是如果第一个查询条件是主键范围查询的话,它依旧会走索引,不过在开发中应该不需要进行主键范围查询。
主键范围查询
EXPLAIN SELECT * FROM `employees` WHERE id > 20 AND age = 20
如果使用别的字段进行范围查询的话则不会走索引
EEXPLAIN SELECT * FROM `employees` WHERE name > "" and age > 20
如果进行相等查询的话可以正常走索引
EXPLAIN SELECT * FROM `employees` WHERE name = "" and age > 20
force index强制使用索引
可以使用force index来强制表中字段走explain possible key的索引字段idx_name_age_position
如下所示
EXPLAIN SELECT * FROM `employees` force index(idx_name_age_position) WHERE name > "li" and age > 20;
但是MySQL走索引不一定比全表扫描快,有的时候,MySQL经过优化,全表扫描会比走索引快一些,全表扫描没有进行回表,反而比走索引快些。
走索引前查询需要0.360S
走索引后反而变慢了
or和in不一定后走索引
or和in,如果数据量不大则不会走索引,MySQL会根据表数据进行统计,如果数据量少的话,直接全表扫可能还快些,不然走索引之后还得回表扫描才能拿到数据
例如有两张相同的表,不同之处在于一张表数据多,一张表数据少,
如果进行查询时,数据少的表是没有走索引的:
EXPLAIN SELECT * FROM employees
而数据多的表就可以直接走索引进行查询。
虽然道路是曲折的,但前途是光明的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律