执行计划解释

news/2025/10/24 15:58:19/文章来源:https://www.cnblogs.com/sunnycc/p/19163629

执行计划解释

MySQL执行计划中的type和extra列是分析查询性能的关键指标:

type列解析
type列表示MySQL访问表数据的方式,按效率从高到低排序如下:
‌system‌:表仅一行数据(系统表特例)

‌const‌:通过主键或唯一索引等值查询,最多返回一行
‌eq_ref‌:表连接时使用主键或唯一索引关联(如JOIN ... ON a.id=b.id)
‌ref‌:使用非唯一索引的等值查询
‌range‌:索引范围扫描(BETWEEN、IN等操作)
‌index‌:全索引扫描(比ALL快,但仍需遍历索引树)
‌ALL‌:全表扫描(性能最差)

extra列详解
extra列显示查询执行的附加信息,常见值包括:

‌Using index‌:覆盖索引,无需回表
‌Using where‌:存储引擎返回数据后需服务器层过滤
‌Using filesort‌:外部排序(需优化ORDER BY)
‌Using temporary‌:创建临时表(常见于GROUP BY)
‌Using index condition‌:使用索引条件下推(ICP)优化:表示查询‌部分利用了索引‌但需要进一步筛选数据
‌Using join buffer‌:使用连接缓存

优化建议
尽量使type达到ref或range级别
通过覆盖索引(Using index)避免回表
避免出现Using filesort和Using temporary
复合索引需遵循最左前缀原则

 

执行计划示例

1‌.const‌ (主键/唯一索引等值查询)

-- 主键精确匹配
SELECT * FROM users WHERE id = 1;
-- 唯一索引精确匹配
SELECT * FROM products WHERE product_code = 'A1001';

 

2.eq_ref‌ (主键/唯一索引关联)

复制代码
-- 多表JOIN时使用主键关联
SELECT * FROM orders o
JOIN users u ON o.user_id = u.id; -- u.id是users表主键-- 使用唯一索引关联
SELECT * FROM orders o
JOIN products p ON o.product_id = p.unique_code; -- p.unique_code是唯一索引
复制代码

 

 

3.ref‌ (非唯一索引等值查询)

-- 普通索引查询
SELECT * FROM orders WHERE status = 'paid'; -- status字段有普通索引-- 多列索引非最左列查询
SELECT * FROM products WHERE category_id = 5; -- 索引是(category_id, price)

 

 

4‌.range‌ (索引范围扫描)

复制代码
-- 范围查询
SELECT * FROM orders
WHERE create_time BETWEEN '2025-01-01' AND '2025-12-31';-- IN查询
SELECT * FROM users WHERE age IN (20, 30, 40);-- 大于/小于查询
SELECT * FROM products WHERE price > 1000;
复制代码

 

 

5.index‌ (全索引扫描)

-- 查询所有索引列值
SELECT indexed_column FROM table_with_index;-- 覆盖索引查询
SELECT id, name FROM users; -- (id,name)有联合索引

 

 

6.ALL‌ (全表扫描)

复制代码
-- 无索引列查询
SELECT * FROM logs WHERE message LIKE '%error%';-- 索引失效的查询
SELECT * FROM products WHERE YEAR(create_time) = 2025;-- 小表查询(优化器认为全表更快)
SELECT * FROM config_table; -- 表中只有10条记录
复制代码

 

extra示例

‌Using index‌:覆盖索引,无需回表

复制代码
-- 查询字段全部在索引中
SELECT id FROM users WHERE id > 100;  -- id是主键-- 复合索引覆盖查询
SELECT name, age FROM employees 
WHERE dept_id = 5;  -- (dept_id, name, age)有联合索引
复制代码

 


‌Using where‌:存储引擎返回数据后需数据库服务器层过滤

 

复制代码
-- 非索引列条件过滤
SELECT * FROM orders 
WHERE total_amount > 1000 AND status = 'paid';  -- 仅total_amount有索引-- 索引列使用函数导致失效
SELECT * FROM products 
WHERE YEAR(create_time) = 2025;  -- create_time有索引
复制代码

 


‌Using filesort‌:外部排序(需优化ORDER BY)

复制代码
-- 非索引列排序
SELECT * FROM users ORDER BY register_date;  -- register_date无索引-- 索引列非常规排序
SELECT * FROM products 
WHERE category = 'electronics' 
ORDER BY price DESC;  -- (category)有索引但price无索引
复制代码

 


‌Using temporary‌:创建临时表(常见于GROUP BY)

复制代码
-- 非索引列GROUP BY
SELECT department, COUNT(*) FROM employees 
GROUP BY department;  -- department无索引-- 复杂DISTINCT操作
SELECT DISTINCT(name), age FROM students;
复制代码

 


‌Using index condition‌:使用索引条件下推(ICP)优化

复制代码
-- 复合索引部分条件过滤
SELECT * FROM orders 
WHERE user_id = 100 AND order_date > '2025-01-01';  -- (user_id, order_date)有索引-- 索引列范围查询+非索引列过滤
SELECT * FROM logs 
WHERE create_time BETWEEN '2025-01-01' AND '2025-12-31' 
AND message LIKE '%error%';  -- create_time有索引
复制代码

 


‌Using join buffer‌:使用连接缓存

 

复制代码
-- 大表JOIN无索引列
SELECT * FROM orders o 
JOIN customers c ON o.customer_name = c.name;  -- name无索引-- 多表复杂JOIN
SELECT * FROM table_a a 
JOIN table_b b ON a.col1 = b.col2 
JOIN table_c c ON b.col3 = c.col4;
复制代码

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB中的Excel文件操作:从入门到精通 - 指南

MATLAB中的Excel文件操作:从入门到精通 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

2025 年保护罩生产厂家最新推荐榜:技术与服务双重测评,精选优质品牌权威指南PVC 法兰保护罩/不锈钢法兰保护罩/设备保护罩公司推荐

工业保护罩作为设备安全防护的核心部件,其性能直接关系到化工、石油等行业的生产安全与运营成本。为破解企业选型难题,本次榜单联合中国工业防护装备协会开展专项测评,基于 GB/T 标准及 ASTM 规范,对 126 家企业进…

Flannel 为 Kubernetes 集群中的容器提供了多种网络通信模式

Flannel 为 Kubernetes 集群中的容器主要提供了三种网络通信模式:VXLAN、host-gw 以及 UDP 。它们在工作原理和性能上有所不同,你可以根据实际的网络环境和需求进行选择。 下面这个表格整理了这三种核心模式的关键信…

linux 查看防火墙放开的端口

目录1. 使用 firewalld(推荐用于 CentOS/RHEL/Fedora)2. 使用 ufw(Ubuntu 系统常见)3. 使用 iptables(传统工具,或底层驱动)4. 使用 netstat 或 ss 查看正在监听的端口(系统级)总结在 Linux 系统中,查看防火…

在nginx中通过多级代理支持grpc协议

本文分享自天翼云开发者社区《在nginx中通过多级代理支持grpc协议》.作者:尹****聪 gRPC 是由 Google 开源的一个 RPC 框架,旨在统一服务间通信的方式。该框架基于 HTTP/2 协议传输,使用 Protocol Buffers 作为接口…

Python---批量去视频的片头和片尾

在需要对视频进行批量处理的时候,常见的就是批量去视频的片头和片尾: 具体代码示例:import os import re import time import subprocess from decimal import Decimal from multiprocessing import Poolpath = rE:…

Linux下的拼音输入法 (1)

我用的是Debian 12 KDE. 国内互联网厂的拼音输入法装了都不能用:可以理解,这哪有做游戏等挣钱啊。 用了半年的sunpinyin,会用程序往用户词典里加词 (在系列2里贴代码)。 今天折腾了一通输入法,把KDE搞坏了,Ctrl…

Docker镜像与容器:轻松理解与实战 - 实践

Docker镜像与容器:轻松理解与实战 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

从数据孤岛到智能洞察:构建面向未来的 Operation intelligence 体系

在数字世界持续运转的过程中,系统每时每刻都在产生海量的数据。我们把这些数据统称为 Operation Data(运营数据)。它不仅记录着系统的运行状态,更蕴藏着驱动业务增长、保障系统稳定、防范安全风险的关键线索。更重…

2025年低合金钢铸件厂家权威推荐榜单:水泵类铸件/矿山机械铸件/阀门类铸件源头厂家精选。

在竞争激烈的制造业中,一家位于镇江、深耕行业二十余年的铸钢企业,以每年超8000吨的产量和远销海外的实力,正赢得全球工业客户的广泛认可。 在当今制造业蓬勃发展的时代,低合金钢铸件因其优异的机械性能和成本效益…

oracle sql格式化

1、实用的 SQL*Plus 格式化脚本-- format.sql - SQL*Plus 格式化脚本 SET ECHO OFF SET FEEDBACK ON SET VERIFY OFF SET HEADING ON SET PAGESIZE 50 SET LINESIZE 200 SET TRIMSPOOL ON SET TAB OFF SET NULL "…

鸿蒙NEXT开发浅进阶到精通14:鸿蒙制作项目中遇到的需求问题及解决笔记05

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

oracle 数据字典应用

1、可以通过v$fixed_table 或dictionary来得到oracle中所有的数据字典 2、v$databaseSQL> select name,created,log_mode,open_mode from v$database;NAME CREATED LOG_MODE OPEN_…

devtoolset-11 工具集

目录如何安装与使用总结devtoolset-11 是 Red Hat 为 Red Hat Enterprise Linux (RHEL) 及其社区版本 CentOS 等系统提供的一套开发工具集,主要用于在不升级整个系统的情况下,获得并使用更新的编译器及开发工具。 下…

2025 长沙美食餐厅最新推荐排行榜权威发布:红记领衔榜单,协会测评认证湘味品质指南 长沙海鲜店/火锅店/小吃店/长沙宵夜推荐

引言 长沙餐饮市场的烟火气背后,是消费者对品质与地道风味的更高追求。为破解市场同质化、食品安全隐忧等问题,本次榜单由湖南省餐饮行业协会联合美团点评共同打造,参考《餐饮服务食品安全量化分级及示范店评定规范…

基于RNN循环神经网络的锂电池剩余寿命预测Matlab实现 - 教程

基于RNN循环神经网络的锂电池剩余寿命预测Matlab实现 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

2025年热门的异形工业铝型材,工业铝型材推荐TOP品牌厂家

2025年热门的异形工业铝型材,工业铝型材推荐TOP品牌厂家随着工业4.0时代的深入发展,异形工业铝型材因其轻量化、高强度、耐腐蚀和可回收等优异特性,正成为智能制造、新能源、轨道交通等高端领域的关键材料。2025年,…

day19-API+functioncalling任务回顾+langchain快速入门

虚拟环境创建 创建虚拟环境语法:conda create -n <环境名称> [选项]。 示例:创建一个名为myenv且指定Python版本为3.8的虚拟环境,命令为conda create -n myenv python=3.10。激活虚拟环境激活:使用命令conda…

在nginx中实现回源日志的功能

本文分享自天翼云开发者社区《在nginx中实现回源日志的功能》.作者:尹****聪 nginx中已经提供了访问日志的功能,主要对客户端的访问状态等进行记录,比如响应给客户端的状态码,请求uri,请求协议等。而对于回源(或者…

实用指南:web核心—HTTP

实用指南:web核心—HTTPpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…