排查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官方导出工具mysqlpump的使用
May 21 MySQL
MySQL Shell import_table数据导入的实现
Aug 07 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
mysql 联合索引生效的条件及索引失效的条件
Nov 20 MySQL
全面盘点MySQL中的那些重要日志文件
Nov 27 MySQL
解决Mysql多行子查询的使用及空值问题
Jan 22 MySQL
MySQL为数据表建立索引的原则详解
Mar 03 MySQL
浅谈如何保证Mysql主从一致
Mar 13 MySQL
分享几个简单MySQL优化小妙招
Mar 31 MySQL
进阶篇之linux环境下安装MySQL数据库
Apr 09 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
MySql中的json_extract函数处理json字段详情
Jun 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公用函数列表[正则]
2007/02/22 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
PHP书写格式详解(必看)
2016/05/23 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
基于jQuery实现图片的前进与后退功能
2013/04/24 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python多线程扫描端口示例
2014/01/16 Python
Python内置函数之filter map reduce介绍
2014/11/30 Python
Python多维/嵌套字典数据无限遍历的实现
2016/11/04 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
python3个性签名设计实现代码
2018/06/19 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
python 默认参数相关知识详解
2019/09/18 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
测量实习生自我鉴定
2013/09/19 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
重阳节标语大全
2014/10/07 职场文书
社会实践活动报告
2015/02/05 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server
Python代码实现双链表
2022/05/25 Python