生产环境MySQL索引时效的排查过程

 更新时间:2022年04月10日 19:59:21   作者:那海蓝蓝  
这篇文章主要介绍了生产环境MySQL索引时效的排查过程,文章根据SQL查询耗时特别长,看了执行计划发现没有走索引的问题展开详细介绍,需要的朋友可以参考一下

 早上收到开发同学求助,有个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可直接使用的查询表的列信息(实现方案)

    本文介绍了如何使用SQL快速将下划线命名的表字段转换为驼峰命名格式,包括确定下划线位置、找到第一个字符、截取并拼接字符串等步骤,通过使用LOCATE、CONCAT、UCASE和LOWER等函数,可以实现高效的字段命名转换,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • 关于MySQL的整型数据的内存溢出问题的应对方法

    关于MySQL的整型数据的内存溢出问题的应对方法

    这篇文章主要介绍了关于MySQL的整型数据的内存溢出问题的应对方法,作者还列出了MySQL所支持的整型数据的存储空间支持大小,需要的朋友可以参考下
    2015-05-05
  • MySQL默认值(DEFAULT)的使用

    MySQL默认值(DEFAULT)的使用

    本文介绍了MySQL中默认值(Default)的使用方法,包括创建表时设置默认值约束、修改表时添加和删除默认值约束等,具有一定的参考价值,感兴趣的可以了解一下
    2025-01-01
  • MySQL存储路径迁移的详细步骤

    MySQL存储路径迁移的详细步骤

    在构建Web应用程序时,MySQL是存储数据的核心工具,在云服务器上,正确设置MySQL的存储路径对应用性能至关重要,通过迁移,我们不仅解决了空间不足的问题,还能让数据库运行得更快,所以本文将给大家介绍MySQL存储路径迁移的详细步骤,需要的朋友可以参考下
    2024-06-06
  • MySQL数据存储路径修改的超详细教程

    MySQL数据存储路径修改的超详细教程

    在生产环境下,mysql的数据、索引都会很大,而mysql的默认存储路径是/val/lib/mysql,这就出现了问题,下面这篇文章主要给大家介绍了关于MySQL数据存储路径修改的超详细教程,需要的朋友可以参考下
    2023-03-03
  • mysql 添加用户并分配select权限的实现

    mysql 添加用户并分配select权限的实现

    在开发MySQL应用程序时,为了保证数据的安全性和准确性,通常需要设置不同级别的用户权限,本文主要介绍了mysql 添加用户并分配select权限的实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • MYSQL数据库使用UTF-8中文编码乱码的解决办法

    MYSQL数据库使用UTF-8中文编码乱码的解决办法

    这篇文章主要介绍了MYSQL数据库使用UTF-8中文编码乱码的解决办法,需要的朋友可以参考下
    2015-10-10
  • MySQL表的四种分区类型详细介绍

    MySQL表的四种分区类型详细介绍

    这篇文章主要介绍了MySQL表的四种分区类型,RANGE分区,LIST分区,HASH分区,KEY分区,需要的朋友可以参考下
    2024-03-03
  • MySQL中随机生成固定长度字符串的方法

    MySQL中随机生成固定长度字符串的方法

    在MySQL中有时需要随机生成数字或字符串,随机生产数字可直接使用rand()函数,但是要随机生成字符串就比较麻烦。
    2010-12-12
  • Java连接Mysql 8.0.18版本的方法详解

    Java连接Mysql 8.0.18版本的方法详解

    这篇文章主要介绍了Java和Mysql 8.0.18版本的连接方式,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10

最新评论