排查MySQL生产环境索引没有效果


Posted in MySQL onApril 11, 2022

 早上收到开发同学求助,有个SQL查询耗时特别长,看了执行计划发现没有走索引,但是不知道原因在哪里,我们一起来分析一下。

mysql>explain SELECT
	* 
FROM
	artisan_income 
WHERE
	parent_id IN (
		222645481,
		222583953,
		222181775,
		222180931,
		222081126,
		221678753,
		221616102,
		221591783,
		221219312,
		221195482,
		221118672,
		220763129,
		220654289,
		220633930,
		220323633,
		220227641,
		219825564,
		219720338,
		219321345,
	219291958 
	) \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: artisan_income
   partitions: 
         type: ALL
possible_keys: idx_parent_id
          key: 
      key_len: 
          ref: 
         rows: 20711352
     filtered: 100
        Extra: Using where

确实是全表扫描,带着疑问我们把生产环境数据同步到测试库,方便测试,然后在测试环境进行查询。

mysql>explain SELECT
	* 
FROM
	artisan_income 
WHERE
	parent_id IN (
		222645481,
		222583953,
		222181775,
		222180931,
		222081126,
		221678753,
		221616102,
		221591783,
		221219312,
		221195482,
		221118672,
		220763129,
		220654289,
		220633930,
		220323633,
		220227641,
		219825564,
		219720338,
		219321345,
	219291958 
	) \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: artisan_income
   partitions: 
         type: range
possible_keys: idx_parent_id
          key: idx_parent_id
      key_len: 5
          ref: 
         rows: 1870780
     filtered: 100
        Extra: Using index condition

发现在测试环境就用到了parent_id字段的索引,生产库和测试库同样都是5.7的版本,数据也几乎一样,但是执行计划不一样,第一时间想到了统计信息的问题,于是进行analyze table

analyze table artisan_income;

然后查看执行计划:

mysql>explain SELECT
	* 
FROM
	artisan_income 
WHERE
	parent_id IN (
		222645481,
		222583953,
		222181775,
		222180931,
		222081126,
		221678753,
		221616102,
		221591783,
		221219312,
		221195482,
		221118672,
		220763129,
		220654289,
		220633930,
		220323633,
		220227641,
		219825564,
		219720338,
		219321345,
	219291958 
	) \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: artisan_income
   partitions: 
         type: range
possible_keys: idx_parent_id
          key: idx_parent_id
      key_len: 5
          ref: 
         rows: 1901880
     filtered: 100
        Extra: Using index condition

发现执行计划已经恢复正常。

mysql>SELECT
	* 
FROM
	artisan_income 
WHERE
	parent_id IN (
		222645481,
		222583953,
		222181775,
		222180931,
		222081126,
		221678753,
		221616102,
		221591783,
		221219312,
		221195482,
		221118672,
		220763129,
		220654289,
		220633930,
		220323633,
		220227641,
		219825564,
		219720338,
		219321345,
	219291958 
	) \G
返回行数:[0],耗时:2 ms.

到此这篇关于生产环境MySQL索引时效的排查过程的文章就介绍到这了,更多相关MySQL索引排查内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
Mysql Online DDL的使用详解
May 20 MySQL
新手必备之MySQL msi版本下载安装图文详细教程
May 21 MySQL
浅谈MySQL next-key lock 加锁范围
Jun 07 MySQL
python中的mysql数据库LIKE操作符详解
Jul 01 MySQL
一篇文章带你深入了解Mysql触发器
Aug 02 MySQL
MySQL空间数据存储及函数
Sep 25 MySQL
mysql sum(if())和count(if())的用法说明
Jan 18 MySQL
浅谈如何保证Mysql主从一致
Mar 13 MySQL
mysql的单列多值存储实例详解
Apr 05 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
讲解MySQL增删改操作
May 06 MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 14 MySQL
排查并解决MySQL生产库内存使用率高的报警
Apr 11 #MySQL
Windows下载并安装MySQL8.0.x 版本的完整教程
MySQL数据库优化之通过索引解决SQL性能问题
Apr 10 #MySQL
MySQL 外连接语法之 OUTER JOIN
Apr 09 #MySQL
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
Apr 09 #MySQL
进阶篇之linux环境下安装MySQL数据库
MySQL的存储函数与存储过程的区别解析
Apr 08 #MySQL
You might like
php生成年月日下载列表的方法
2015/04/24 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
js实现鼠标移动到图片产生遮罩效果
2017/10/21 Javascript
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
2018/06/01 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python计算列表内各元素的个数实例
2018/06/29 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
Python3中exp()函数用法分析
2019/02/19 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
python实现12306登录并保存cookie的方法示例
2019/12/17 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
马来西亚在线药房:RoyalePharma
2019/12/01 全球购物
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
2014/09/15 面试题
应用化学专业职业生涯规划书
2014/01/22 职场文书
关于母亲节的感言
2014/02/04 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
结婚主持人致辞
2015/07/28 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
Java Socket实现多人聊天系统
2021/07/15 Java/Android
把77A收信机改造成收音机
2022/04/05 无线电