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

2.SQL语句执行慢,如何分析

上一篇咱们提到了,慢查询的主要四种情况:

  • 聚合查询
  • 多表查询
  • 表数据量过大查询
  • 深度分页查询

 如果需要对慢查询进行分析,可以使用数据库提供的工具查看SQL的执行计划。

我们来说一下什么是 “检查执行计划”。


检查执行计划

使用数据库提供的工具查看SQL的执行计划。例如在MySQL中可以使用 EXPLAIN 命令,Oracle中可以使用 EXPLAIN PLAN FOR。执行计划会显示SQL语句是如何执行的,包括使用的索引、表连接顺序等信息。


常见数据库查看执行计划的方法

MySQL

-- 基本执行计划
EXPLAIN SELECT * FROM users WHERE id = 100;-- 更详细的执行信息(实际执行查询)
EXPLAIN ANALYZE SELECT * FROM users WHERE id = 100;

Oracle

-- 生成执行计划
EXPLAIN PLAN FOR SELECT * FROM users WHERE id = 100;-- 查看执行计划
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

SQL Server

-- 文本格式执行计划
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM users WHERE id = 100;
GO
SET SHOWPLAN_TEXT OFF;
GO-- 图形化执行计划(在SSMS中)
-- 点击"包含实际执行计划"按钮后执行查询

PostgreSQL

-- 基本执行计划
EXPLAIN SELECT * FROM users WHERE id = 100;-- 带实际执行统计的执行计划
EXPLAIN ANALYZE SELECT * FROM users WHERE id = 100;

执行计划的结果

执行:

EXPLAIN SELECT * FROM users WHERE id = 100

结果如下: 

+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | users | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+

输出字段解释(黄色是重要信息):

字段说明
id查询中SELECT的序列号,id相同表示同一层级执行,id越大优先级越高
select_type查询类型:
- SIMPLE:简单查询(无子查询或UNION)
- PRIMARY:主查询
- SUBQUERY:子查询
- DERIVED:派生表(FROM子句中的子查询)
- UNION:UNION中的第二个或后面的查询
table访问的表名或别名
partitions匹配的分区
type访问类型(性能关键指标),从好到坏:
- system > const > eq_ref > ref > range > index > ALL
ALL表示全表扫描,通常需要优化
possible_keys可能使用的索引
key实际使用的索引
key_len使用的索引长度
ref显示索引的哪一列被使用
rows预估需要读取的行数
filtered表示存储引擎返回的数据在server层过滤后剩余的比例
Extra额外信息:
- Using index:覆盖索引
- Using where:使用了WHERE过滤
- Using temporary:使用临时表
- Using filesort:需要额外排序


上一篇                             ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​       

 

http://www.lryc.cn/news/578523.html

相关文章:

  • 07CSRF 漏洞保护
  • 事件监听器 + 回调处理器的事件循环系统
  • OpenCV CUDA模块设备层-----二值化阈值操作函数thresh_binary_func()
  • 设计模式精讲 Day 21:策略模式(Strategy Pattern)
  • 【STM32】 STM32低功耗模式详解:睡眠模式与唤醒机制【待测试】
  • 单元测试详解
  • 记录一个 Linux中脚本无法执行的问题
  • 构建淘宝评论监控系统:API 接口开发与实时数据采集教程
  • Camera相机人脸识别系列专题分析之十五:人脸特征检测FFD算法之libcvface_api.so算法API详细注释解析
  • Docker制作python环境
  • C++ 11 中 condition_variable 的探索与实践
  • 当足球遇上AI:赛事分析、伤病预测与智能裁判的崛起
  • postman入门篇
  • RabbitMQ - SpringAMQP及Work模型
  • k8s将service的IP对应的不同端口分配到不同的pod上
  • Vue 3 中的 `h` 函数详解
  • CAD文件处理控件Aspose.CAD教程:使用 Python 将绘图转换为 Photoshop
  • 【Python】字典get方法介绍
  • 面试拷打-20250701
  • 计网学习笔记第1章 计算机网络体系结构(灰灰题库)
  • 论文阅读笔记 NoPoSplat
  • 笔记/计算机网络
  • 动手学深度学习13.5. 多尺度目标检测-笔记练习(PyTorch)
  • 推客系统小程序终极指南:从0到1构建自动裂变增长引擎,实现业绩10倍增长!
  • (JAVA)自建应用调用企业微信API接口,实现消息推送
  • uniapp+vue写小程序页面,实现一张图片默认放大后,可以在容器内上下左右拖动查看
  • android13 如何定时输出app的帧率FPS
  • 应急响应类题练习——玄机第五章 Windows 实战-evtx 文件分析
  • mac重复文件清理,摄影师同款清理方案
  • COCO、VOC 和 YOLO三种主流目标检测数据格式的详细对比与示例说明