排查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 05 MySQL
MySQL 重写查询语句的三种策略
May 10 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
MySQL8.0无法启动3534的解决方法
Jun 03 MySQL
MySQL 四种连接和多表查询详解
Jul 16 MySQL
MySQL如何解决幻读问题
Aug 07 MySQL
mysql 联合索引生效的条件及索引失效的条件
Nov 20 MySQL
Mysql外键约束的创建与删除的使用
Mar 03 MySQL
MySQL优化及索引解析
Mar 17 MySQL
mysql中如何用命令创建联合唯一索引
Apr 20 MySQL
MYSQL事务的隔离级别与MVCC
May 25 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 mysql数据库操作类
2008/06/04 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
php为字符串前后添加指定数量字符的方法
2015/05/04 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
关于this和self的使用说明
2010/08/01 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
js中string和number类型互转换技巧(分享)
2016/11/28 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
python实现将元祖转换成数组的方法
2015/05/04 Python
python中logging包的使用总结
2018/02/28 Python
python读取和保存图片5种方法对比
2018/09/12 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
python raise的基本使用
2020/09/10 Python
python Xpath语法的使用
2020/11/26 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
什么是servlet
2012/05/08 面试题
静心口服夜广告词
2014/03/20 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
企业投资意向书
2015/05/09 职场文书
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python
python如何将mat文件转为png
2022/07/15 Python
python playwrigh框架入门安装使用
2022/07/23 Python