排查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 函数调用优化
Apr 07 MySQL
Mysql systemctl start mysqld报错的问题解决
Jun 03 MySQL
MySQL中存储时间的最佳实践指南
Jul 01 MySQL
一文带你探究MySQL中的NULL
Nov 11 MySQL
Mysql忘记密码解决方法
Feb 12 MySQL
MySQL数据库完全卸载的方法
Mar 03 MySQL
MySQL Server层四个日志的实现
Mar 31 MySQL
Mysql多层子查询示例代码(收藏夹案例)
Mar 31 MySQL
MySQL数据库中的锁、解锁以及删除事务
May 06 MySQL
MySQL优化之慢日志查询
Jun 10 MySQL
MySQL的表级锁,行级锁,排它锁和共享锁
Jul 15 MySQL
MySQL性能指标TPS+QPS+IOPS压测
Aug 05 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输出缓存(output_buffering)的深入理解
2013/06/13 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
canvas像素画板的实现代码
2018/11/21 HTML / CSS
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
《我要的是葫芦》教学反思
2014/02/23 职场文书
个人授权委托书
2014/04/03 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
课程设计的心得体会
2014/09/03 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
初一英语教学反思
2016/02/15 职场文书