MySQL索引失效场景

索引失效场景

  1. 如果条件中有or,即使其中有条件带索引也不会使用;
  2. 使用!=对索引列进行判断,也会使索引失效;
  3. 使用is null 或者is not null做判断,会使该列索引失效;
  4. 对于联合索引,违背了最左匹配原则,会导致索引失效;
  5. like查询以%开头,会使索引失效;
  6. 如果列类型是字符串,那一定要在条件中将数据使用单引号引用起来,否则不使用索引;
  7. 在索引的列上使用表达式或者函数会使索引失效;

最左前缀匹配原则 是 MySQL 在使用联合索引时的规则。简单来说,查询条件必须从索引的最左边的列开始,不能跳过。如果跳过了某个左侧的列,MySQL 就不能使用这个索引来加速查询。

如何分析 SQL 语句是否走索引查询

可以使用 EXPLAIN 命令来分析 SQL 的 执行计划 ,这样就知道语句是否命中索引了。执行计划是指一条 SQL 语句在经过 MySQL 查询优化器的优化会后,具体的执行方式。

EXPLAIN 输出的一些重要字段包括:

  • id:查询的唯一标识,帮助区分不同的查询操作。
  • select_type:查询的类型,如简单查询、联合查询等。
  • table:查询操作涉及的表。
  • type :访问表的方式,如全表扫描、索引扫描等。。
    • index:全索引扫描。
    • range:通过索引范围扫描。
    • ref:使用非唯一索引扫描。
    • eq_ref:使用唯一索引扫描,通常用于连接查询。
    • const、system:表只有一行数据时,使用 const 或 system。
  • possible_keys:查询可能使用的索引。
  • key:实际使用的索引。
  • rows:扫描的行数,越少越好。
相关推荐
前进的李工1 天前
飞书企业知识库设计+后端高频八股
数据库·redis·后端·mysql·性能优化·飞书·rag
为思念酝酿的痛1 天前
MySQL数据类型
数据库·mysql
程序员塔塔喵1 天前
【MySQL篇|第二篇】慢SQL及其优化手段
sql·mysql·慢sql优化
为思念酝酿的痛1 天前
MySQL数据库基础
数据库·mysql
paopaokaka_luck1 天前
智慧电玩店管理系统(空闲机台随机分配、游玩时长概率模拟、积分自动结算、积分兑换闭环、 ECharts经营分析、 腾讯地图选址)
java·人工智能·mysql·echarts·推荐算法
*长铗归来*1 天前
MySQL新学知识(三)MySQL 事件(EVENT)
数据库·mysql
Warolitbos1 天前
【数据库】SQL进阶15题,窗口函数/索引/事务一页速查
数据库·sql·学习·mysql·面试
从零数据分析1 天前
零基础学SQL 23:和上月比总对不上?LAG/LEAD 一步取出上一次(附 4 个模板)
java·数据库·sql·mysql·oracle·sqlite·database
太理摆烂哥1 天前
MySQL的查询
数据库·mysql
程序员塔塔喵1 天前
【MySQL篇|第四篇】事务隔离级别
数据库·mysql·事务隔离级别