当前位置: 首页 > ops >正文

慢SQL优化

慢SQL通常指执行时间超过预设阈值的查询语句。不同业务场景对"慢"的定义可能不同,例如电商系统可能将超过200ms的查询视为慢查询,而数据分析系统可能将超过5秒的查询才视为慢查询。

工具监控

数据库系统通常提供内置的监控工具,如MySQL的慢查询日志和Performance Schema。

慢查询日志需要配置long_query_time参数来定义阈值,记录执行时间超过该值的查询。Performance Schema能提供更详细的性能数据,包括查询执行时间、锁等待时间等指标。

1)查看 Performance Schema 的配置信息

1

SHOW VARIABLES LIKE 'performance_schema%'

2)查看 Performance Schema 的监控项:

1

SELECT * FROM performance_schema.setup_instruments

3)查看 Performance Schema 收集的性能数据:

1

SELECT * FROM performance_schema.events_statements_summary_by_digest

分析慢SQL

explain

https://segmentfault.com/a/1190000023565685

explain select * from user;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | user  | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   23 |   100.00 | NULL  |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
  • select_type:
    • SIMPLE简单查询,不包括子查询和union查询
    • PRIMARY当存在子查询时,最外面的查询被标记为主查询
    • SUBQUERY 子查询
  • partitions:

    • 分区表命中的分区情况

  • type:

    • 可能的几种值:NULL > system > const > eq_ref > ref > ref_or_null > index_merge > range > index > ALL,越是靠左越好,NULL 说明能够在优化阶段分解查询语句,在执行阶段用不着再访问表或索引,那么不查询索引也不查询表那你的数据是从哪里来的啊?如select 5*7,是不需要查数据的,SELECT MAX(id) FROM table,MySQL会直接到你的索引的分叶子节点上直接拿,所以不用访问表或者索引。ref 则是单表扫描或者连接。ref_or_null 类似ref,但是可以搜索值为NULL的行。index_merge 表示查询使用了两个以上的索引。range 索引范围查询。index index只遍历索引树,通常比All快。

  • possible_key:

    • 可能会使用的索引

  • key:

    • 实际会使用的索引

  • rows

    • 需要查询的行数

索引优化

确保查询条件列和排序字段都有适当索引

查询优化

对于复杂查询,考虑拆分为多个简单查询

http://www.xdnf.cn/news/19218.html

相关文章:

  • SQL 学习
  • 以声为剑,绘山河热血——刘洋洋《不惧》8月30日全网上线
  • 逆向思维下,如何把基金投资做亏?
  • 算法 --- 前缀和
  • 一文了解大模型微调
  • AWD相关知识
  • 【Python】国内可用的高速pip镜像源大全
  • 蓝牙5.3核心技术架构解析:从控制器到主机的无线通信设计
  • 知识随记-----Qt 样式表深度解析:何时需要重写 paintEvent 让 QSS 生效
  • 鸿蒙ArkTS 核心篇-15-条件渲染(组件)
  • 如何改变传统教育的消费习惯-第三代结束-第四代开启
  • 源码解析-时间轮[HashedWheelTimer]
  • 项目管理方法如何选择
  • Python实现京东商品数据自动化采集的实用指南
  • 水库/油箱/化工罐区...无线液位控制系统如何实现远程监控?
  • C++ constexpr:编译时计算的高效秘籍
  • 动态规划--Day05--最大子数组和--53. 最大子数组和,2606. 找到最大开销的子字符串,1749. 任意子数组和的绝对值的最大值
  • 音视频学习(六十):H264中的PPS
  • 基于Kubernetes Operator的自动化运维平台设计与实践
  • Ethan开发者创新项目日报 | 2025-08-30
  • OpenGeode 综合介绍(基于 GitHub 仓库)
  • pikachu之XSS
  • JavaWeb前端06(ElementPlus快速构建网页)
  • JavaScript 一些进阶知识点与注意事项
  • Python可视化与交互-matplotlib库
  • 仓颉编程语言青少年基础教程:程序基本结构和语言特点
  • 【leetcode】112. 路径总和
  • # `std::basic_istream`总结
  • 基于 MyBatis-Plus 拦截器实现“结账后禁止修改”的优雅方案
  • 数据库的CURD