经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
生产环境MySQL索引时效的排查过程
来源:jb51  时间:2022/4/11 8:45:04  对本文有异议

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

  1. mysql>explain SELECT
  2. *
  3. FROM
  4. artisan_income
  5. WHERE
  6. parent_id IN (
  7. 222645481,
  8. 222583953,
  9. 222181775,
  10. 222180931,
  11. 222081126,
  12. 221678753,
  13. 221616102,
  14. 221591783,
  15. 221219312,
  16. 221195482,
  17. 221118672,
  18. 220763129,
  19. 220654289,
  20. 220633930,
  21. 220323633,
  22. 220227641,
  23. 219825564,
  24. 219720338,
  25. 219321345,
  26. 219291958
  27. ) \G
  28. *************************** 1. row ***************************
  29. id: 1
  30. select_type: SIMPLE
  31. table: artisan_income
  32. partitions:
  33. type: ALL
  34. possible_keys: idx_parent_id
  35. key:
  36. key_len:
  37. ref:
  38. rows: 20711352
  39. filtered: 100
  40. Extra: Using where

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

  1. mysql>explain SELECT
  2. *
  3. FROM
  4. artisan_income
  5. WHERE
  6. parent_id IN (
  7. 222645481,
  8. 222583953,
  9. 222181775,
  10. 222180931,
  11. 222081126,
  12. 221678753,
  13. 221616102,
  14. 221591783,
  15. 221219312,
  16. 221195482,
  17. 221118672,
  18. 220763129,
  19. 220654289,
  20. 220633930,
  21. 220323633,
  22. 220227641,
  23. 219825564,
  24. 219720338,
  25. 219321345,
  26. 219291958
  27. ) \G
  28. *************************** 1. row ***************************
  29. id: 1
  30. select_type: SIMPLE
  31. table: artisan_income
  32. partitions:
  33. type: range
  34. possible_keys: idx_parent_id
  35. key: idx_parent_id
  36. key_len: 5
  37. ref:
  38. rows: 1870780
  39. filtered: 100
  40. Extra: Using index condition

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

  1. analyze table artisan_income;

然后查看执行计划:

  1. mysql>explain SELECT
  2. *
  3. FROM
  4. artisan_income
  5. WHERE
  6. parent_id IN (
  7. 222645481,
  8. 222583953,
  9. 222181775,
  10. 222180931,
  11. 222081126,
  12. 221678753,
  13. 221616102,
  14. 221591783,
  15. 221219312,
  16. 221195482,
  17. 221118672,
  18. 220763129,
  19. 220654289,
  20. 220633930,
  21. 220323633,
  22. 220227641,
  23. 219825564,
  24. 219720338,
  25. 219321345,
  26. 219291958
  27. ) \G
  28. *************************** 1. row ***************************
  29. id: 1
  30. select_type: SIMPLE
  31. table: artisan_income
  32. partitions:
  33. type: range
  34. possible_keys: idx_parent_id
  35. key: idx_parent_id
  36. key_len: 5
  37. ref:
  38. rows: 1901880
  39. filtered: 100
  40. Extra: Using index condition

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

  1. mysql>SELECT
  2. *
  3. FROM
  4. artisan_income
  5. WHERE
  6. parent_id IN (
  7. 222645481,
  8. 222583953,
  9. 222181775,
  10. 222180931,
  11. 222081126,
  12. 221678753,
  13. 221616102,
  14. 221591783,
  15. 221219312,
  16. 221195482,
  17. 221118672,
  18. 220763129,
  19. 220654289,
  20. 220633930,
  21. 220323633,
  22. 220227641,
  23. 219825564,
  24. 219720338,
  25. 219321345,
  26. 219291958
  27. ) \G
  28. 返回行数:[0],耗时:2 ms.

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号