MySQL索引使用一定有效吗?如何排查索引效果?

MySQL索引使用一定有效吗?如何排查索引效果?

1. 索引一定有效吗?

不一定! 即使你创建了索引,MySQL 也可能因为以下原因 不使用索引索引效果不佳

  • 索引选择错误:MySQL 优化器可能选择了错误的索引。
  • 索引失效场景:某些 SQL 写法会导致索引失效。
  • 数据分布问题:数据量太少或数据分布不均,导致全表扫描更快。
  • 索引设计不合理:索引列顺序、类型不匹配等。

2. 索引失效的常见场景

(1) 使用 !=NOT INNOT EXISTS

SELECT * FROM users WHERE age != 20;  -- 可能不走索引
SELECT * FROM users WHERE id NOT IN (1, 2, 3);  -- 可能全表扫描

(2) 使用 LIKE 以通配符开头

SELECT * FROM users WHERE name LIKE '%Alice%';  -- 不走索引
SELECT * FROM users WHERE name LIKE 'Alice%';   -- 可能走索引

(3) 对索引列使用函数或计算

SELECT * FROM users WHERE YEAR(create_time) = 2023;  -- 不走索引
-- 优化:使用范围查询
SELECT * FROM users WHERE create_time BETWEEN '2023-01-01' AND '2023-12-31';

(4) 数据类型不匹配(隐式转换)

-- name 是 VARCHAR,但用数字查询
SELECT * FROM users WHERE name = 123;  -- 不走索引(隐式转换成字符串)

(5) 复合索引未遵循最左前缀原则

-- 假设有联合索引 (name, age)
SELECT * FROM users WHERE age = 20;  -- 不走索引(缺少 name 条件)

(6) 数据量太少

  • 如果表只有几十行数据,MySQL 可能直接全表扫描,因为索引查找+回表的开销更大。

3. 如何排查索引效果?

方法 1:使用 EXPLAIN 分析执行计划

EXPLAIN SELECT * FROM users WHERE name = 'Alice';

重点关注:

  • type:查询类型(const > ref > range > index > ALL
  • key:实际使用的索引
  • rows:预估扫描行数
  • Extra:额外信息(Using index 表示覆盖索引)

示例输出:

idselect_typetabletypekeyrowsExtra
1SIMPLEusersrefidx_name1NULL
  • type=ALL:全表扫描(索引可能未生效)
  • key=NULL:未使用索引

方法 2:检查索引使用情况

-- 查看表的索引
SHOW INDEX FROM users;-- 查看索引使用统计(需开启性能模式)
SELECT * FROM performance_schema.table_io_waits_summary_by_index_usage 
WHERE OBJECT_SCHEMA = 'your_db' AND OBJECT_NAME = 'users';
  • index_name:索引名称
  • count_read:索引被读取次数(越高说明索引越有效)

方法 3:使用 OPTIMIZER_TRACE 查看优化器决策

-- 开启优化器跟踪
SET optimizer_trace = 'enabled=on';
SET optimizer_trace_max_mem_size = 1000000;-- 执行查询
SELECT * FROM users WHERE name = 'Alice';-- 查看优化器决策
SELECT * FROM information_schema.optimizer_trace;
  • 可以看到 MySQL 为什么选择(或不选择)某个索引。

方法 4:强制使用索引(测试对比)

-- 强制使用索引
SELECT * FROM users FORCE INDEX (idx_name) WHERE name = 'Alice';-- 对比性能
EXPLAIN SELECT * FROM users FORCE INDEX (idx_name) WHERE name = 'Alice';
EXPLAIN SELECT * FROM users IGNORE INDEX (idx_name) WHERE name = 'Alice';
  • 如果强制索引后查询变快,说明优化器可能选错了索引。

4. 如何优化索引?

(1) 选择合适的索引列

  • 高选择性列(如 user_idgender 更适合索引)。
  • 频繁查询的列(如 WHEREORDER BYJOIN 条件)。

(2) 使用覆盖索引

-- 优化前:需要回表
SELECT id, name, age FROM users WHERE name = 'Alice';-- 优化后:使用 (name, age) 联合索引,避免回表
ALTER TABLE users ADD INDEX idx_name_age (name, age);

(3) 避免索引冗余

-- 已有 (name, age) 索引,再建 (name) 就是冗余的
ALTER TABLE users DROP INDEX idx_name;

(4) 定期分析表

-- 更新索引统计信息
ANALYZE TABLE users;-- 重建索引(修复碎片化)
OPTIMIZE TABLE users;

5. 总结

问题解决方案
索引未生效检查 EXPLAIN,避免索引失效场景
优化器选错索引使用 FORCE INDEXOPTIMIZER_TRACE 分析
索引效果差优化索引设计,使用覆盖索引
数据量太少可能不需要索引

📌 建议:

  • 使用 EXPLAIN 分析关键查询。
  • 避免索引失效写法(如 LIKE '%xxx%、函数计算)。
  • 定期检查索引使用情况,删除冗余索引。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漏洞管理体系:从扫描评估到修复验证的全生命周期实践

漏洞管理体系:从扫描评估到修复验证的全生命周期实践 在网络安全防御体系中,漏洞管理是“攻防博弈”的核心战场。据NVD(国家漏洞数据库)统计,2023年新增漏洞超21万个,平均每天披露575个,其中32…

cdh平台管理与运维最佳实践

一、容量规划:构建可持续扩展的数据湖底座 1.1 资源评估三维模型 #mermaid-svg-4Fd5JDKTgwqF1BUd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4Fd5JDKTgwqF1BUd .error-icon{fill:#552222;}#mermaid-svg-4Fd5J…

力扣347:前K个高频元素

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2]示例 2: 输入: nums [1], k 1 输出: [1]题解: 一、思路: 1.我希望将nu…

前馈神经网络层

FeedForward Network 论文地址 https://arxiv.org/pdf/1706.03762 前馈网络介绍 前馈网络是Transformer模型中的关键组件,每个Transformer层包含一个多头注意力模块和一个前馈网络模块。该模块通过两次线性变换和激活函数,为模型提供非线性建模能力。其核…

如何将 sNp 文件导入并绘制到 AEDT (HFSS)

导入 sNp 文件 打开您的项目,右键单击 “Result” 绘制结果 导入后,用户可以选择它进行打印。请参阅下面的示例。要点:确保从 Solution 中选择它。

es-核心储存原理介绍

原始数据 idusernamegradedescription1ahua87i like study2xiaowang92i like es3zhaoyun63i like java 倒排索引 description使用的text分词,使用倒排索引 termidi1,2,3like1,2,3study1es2java3 分词后,如果匹配 es,则需要逐行匹配&…

jmeter中监控服务器ServerAgent

插件下载: 将ServerAgent上传至需要监控的服务器,mac/liunx启动startAgent.sh(启动命令:./startAgent.sh) 在jmeter中添加permon监控组件 配置需要监控的服务器IP地址,添加需要监控的资源 注意&#xf…

UML 状态图:以共享汽车系统状态图为例

目录 一、初识 UML 状态图 二、共享汽车系统状态图详解 (一)初始状态与车辆空闲状态 (二)用户预定相关状态 (三)等待取车与用户取车状态 (四)用户还车及后续状态 三、状态图绘…

橙子果品分级-目标检测数据集(包括VOC格式、YOLO格式)

橙子果品分级-目标检测数据集(包括VOC格式、YOLO格式) 数据集: 链接:https://pan.baidu.com/s/1jpdrylu06mm0r9pGVyb-AQ?pwd94a6 提取码: 94a6 数据集信息介绍: 共有 9195 张图像和一一对应的标注文件 标注文件格式…

uniapp 仿企微左边公司切换页

示例代码&#xff1a; <template><view class"container"><!-- 遮罩层 --><view class"mask" v-if"showSidebar" click"closeSidebar"></view><!-- 侧边栏 --><view class"sidebar"…

pyqt中以鼠标所在位置为锚点缩放图片

在编写涉及到图片缩放的pyqt程序时&#xff0c;如果以鼠标为锚点缩放图片&#xff0c;图片上处于鼠标所在位置的点&#xff08;通常也是用户关注的图片上的点&#xff09;不会移动&#xff0c;更不会消失在图片显示区域之外&#xff0c;可以提高用户体验&#xff0c;是一个值得…

巧记英语四级单词 Unit5-中【晓艳老师版】

ignore v.无视&#xff0c;不理睬 发音“一个闹”&#xff0c;对付一个无理取闹的孩子&#xff0c;最好的方式就是无视 不理睬ignorant a.无知的&#xff0c;不礼貌的 对于什么事都无视&#xff0c;中国第一个不平等条约问也不知道就是无知的neglect n.忽视 negative消极的&a…

go 编译的 windows 进程(exe)以管理员权限启动(UAC)

引言 windows 系统&#xff0c;在打开某些 exe 的时候&#xff0c;会弹出“用户账户控制(UAC)”的弹窗 “你要允许来自xx发布者的此应用对你的设备进行更改吗&#xff1f;” UAC&#xff08;User Account Control&#xff0c;用户账户控制&#xff09;是 Windows 操作系统中的…

go.mod介绍

在 Go 项目中&#xff0c;.mod 文件&#xff08;全称 go.mod&#xff09;是 Go 语言模块&#xff08;Module&#xff09;系统的核心配置文件&#xff0c;用于定义和管理项目的依赖关系、模块名称及兼容性规则。以下是其核心作用与结构的详细说明&#xff1a; 一、go.mod 文件的…

基于CATIA参数化管道建模的自动化插件开发实践——NX建模之管道命令的参考与移植

引言 在机械设计领域&#xff0c;CATIA作为行业领先的CAD软件&#xff0c;其强大的参数化建模能力备受青睐。本文介绍如何利用Python的PySide6框架与CATIA二次开发技术&#xff0c;开发一款智能管状体生成工具。该工具借鉴了同类工业软件NX的建模的管道命令&#xff0c;通过Py…

centos7使用yum快速安装最新版本Jenkins-2.462.3

Jenkins支持多种安装方式&#xff1a;yum安装、war包安装、Docker安装等。 官方下载地址&#xff1a;https://www.jenkins.io/zh/download 本次实验使用yum方式安装Jenkins LTS长期支持版&#xff0c;版本为 2.462.3。 一、Jenkins基础环境的安装与配置 1.1&#xff1a;基本…

BiliNote:开源的AI视频笔记生成工具,让知识提取与分享更高效——跨平台自动生成结构化笔记,实现从视频到Markdown的智能转化

引言:视频学习的痛点与BiliNote的解决方案 随着知识视频化趋势的加速,B站、YouTube等平台成为学习与信息获取的重要渠道,但手动记录笔记耗时低效、信息碎片化等问题依然突出。BiliNote的出现,通过AI驱动的自动化流程,将视频内容转化为结构清晰的Markdown笔记,支持截图插…

DAX Studio将PowerBI与EXCEL连接

DAX Studio将PowerBI与EXCEL连接 具体步骤如下&#xff1a; 第一步&#xff1a;先打开一个PowerBI的文件&#xff0c;在外部工具栏里打开DAXStudio&#xff0c;如图&#xff1a; 第二步&#xff1a;DAXStudio界面&#xff0c;点击Advanced选项卡-->Analyze in Excel&#…

Redis-cli常用参数及功能的详细说明

Redis-cli常用参数及功能的详细说明 相关参考知识书籍 <<Redis运维与开发>> 以下是Redis-cli常用参数及功能的详细说明 1. **-r​&#xff08;重复执行命令&#xff09;** 作用&#xff1a;重复执行指定命令多次。 示例&#xff1a;执行3次PING​命令&#xff1…

百度文心4.5 Turbo与DeepSeek、豆包、元宝对比:技术路径与市场格局分析​​

今日&#xff0c;百度发布文心大模型4.5 Turbo与X1 Turbo&#xff0c;主打多模态能力提升与成本优化&#xff0c;成为AI搜索领域的重要技术迭代。与此同时&#xff0c;DeepSeek、豆包&#xff08;字节跳动&#xff09;、腾讯元宝等竞品凭借差异化定位持续抢占市场。本文将从技术…