SQL - Navicat查看SQL执行计划

news2024/12/24 21:16:51

我们在工作中肯定写过sql语句,也会进行一下sql语句的优化,在优化sql语句里看过相应的explain 在进行sql语句优化的时候,理解执行计划中各个参数的意思,弄明白执行的顺序,对sql优化有很大的帮助。

1、通过 Explain 命令查看执行计划

2、通过Navicat查看执行计划

在Navicat中执行完相应的sql语句,然后点击【解释】,其实执行计划就是解释怎么执行的sql语句,有的版本的“解释”按钮在上面,有的版本的“解释”按钮在下面,视版本不同而定

MySQL5.7官网解释

MySQL :: MySQL 5.7 Reference Manual :: 8.8.2 EXPLAIN Output Format

Table 8.1 EXPLAIN Output Columns

ColumnJSON NameMeaning
idselect_idThe SELECT identifier
select_typeNoneThe SELECT type
tabletable_nameThe table for the output row
partitionspartitionsThe matching partitions
typeaccess_typeThe join type
possible_keyspossible_keysThe possible indexes to choose
keykeyThe index actually chosen
key_lenkey_lengthThe length of the chosen key
refrefThe columns compared to the index
rowsrowsEstimate of rows to be examined
filteredfilteredPercentage of rows filtered by table condition
ExtraNoneAdditional information

Note

JSON properties which are NULL are not displayed in JSON-formatted EXPLAIN output.

EXPLAIN Join Types

The type column of EXPLAIN output describes how tables are joined. In JSON-formatted output, these are found as values of the access_type property. The following list describes the join types, ordered from the best type to the worst:

1、id:执行顺序

分为三种情况:id一样;id不一样;id既存在一样的,又存在不一样的

【1】id一样的,执行顺序从上到下

【2】id不一样的,id越大,等级越高,执行顺序约先;

【3】id既存在相同又存在不同的,相同id的为一组,不同id的为不同组,不同组之间id越大,等级越高,越先执行,同组之间,执行顺序从上到下

2、select_type:子查询的种类

1、SIMPLE:简单的select查询,查询中不包含子查询或者union

2、PRIMARY:查询中包含任何复杂的子部分,最外层查询则被标记为primary

3、SUBQUERY:在select 或 where列表中包含了子查询

4、DERIVED:在from列表中包含的子查询被标记为derived(衍生),mysql或递归执行这些子查询,把结果放在临时表里

5、UNION:若第二个select出现在union之后,则被标记为union;若union包含在from子句的子查询中,外层select将被标记为derived

6、UNION RESULT:从union表获取结果的select

3、table:表名

4、type:查询的类型

自上而下,由差到最好,一般来说,好的sql查询至少达到range级别,最好能达到ref

all:全表扫描

index:遍历索引树,index与ALL区别为index类型只遍历索引树,Index与ALL虽然都是读全表,但index是从索引中读取,而ALL是从硬盘读取

range:索引范围扫描,只检索给定范围的行,使用一个索引来选择行。key列显示使用了那个索引。一般就是在where语句中出现了bettween、<、>、in等的查询。这种索引列上的范围扫描比全索引扫描要好。只需要开始于某个点,结束于另一个点,不用扫描全部索引

ref:非唯一性索引扫描,返回匹配某个单独值的所有行

eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配

const,system:常量转换

NULL:分解语句,执行时甚至不用访问表或索引

5、possible_keys

查询涉及到字段上的索引,则该索引将被列出,但不一定被查询实际使用

6、key

SQL语句实际用到的索引

7、key_len

使用的索引的字节数,表示索引中使用的字节数,查询中使用的索引的长度(最大可能长度),并非实际使用长度,理论上长度越短越好。key_len是根据表定义计算而得的,不是通过表内检索出的

8、ref

哪些列或常量被用于查找索引列上的值

9、rows

得到数据所需要读取的行数

10、filtered

MySql5.7官方文档中描述如下:

Thefilteredcolumn indicates an estimated percentage of table rows filtered by the table condition. The maximum value is 100, which means no filtering of rows occurred. Values decreasing from 100 indicate increasing amounts of filtering.rowsshows the estimated number of rows examined androws×filteredshows the number of rows joined with the following table. For example, ifrowsis 1000 andfilteredis 50.00 (50%), the number of rows to be joined with the following table is 1000 × 50% = 500.

这段文字不是很好理解,举例来说,有如下三个查询语句的explain结果,针对b和c表的显示filtered是100,而针对a表的显示是18。

+-------------+-------+--------+---------+---------+------+----------+
| select_type | table | type   | key     | key_len | rows | filtered |
+-------------+-------+--------+---------+---------+------+----------+
| PRIMARY     | a     | range  | search  | 4       |  174 |   18.00  |
| PRIMARY     | b     | eq_ref | PRIMARY | 4       |    1 |   100.00 |
| PRIMARY     | c     | ALL    | PRIMARY | 4       |    1 |   100.00 |

我们可以怎么理解filtered的值呢?从filtered的值中得出什么结论呢?到底是100更好还是18更好?
首先,这里的filtered表示通过查询条件获取的最终记录行数占通过type字段指明的搜索方式搜索出来的记录行数的百分比。
以上图的第一条语句为例,MySQL首先使用索引(这里的type是range)扫描表a,预计会得到174条记录,也就是rows列展示的记录数。接下来MySql会使用额外的查询条件对这174行记录做二次过滤,最终得到符合查询语句的32条记录,也就是174条记录的18%。而18%就是filtered的值。
更完美的情况下,应该是使用某个索引,直接搜索出32条记录并且过滤掉另外82%的记录。
因此一个比较低filtered值表示需要有一个更好的索引,假如type=all,表示以全表扫描的方式得到1000条记录,且filtered=0.1%,表示只有1条记录是符合搜索条件的。此时如果加一个索引可以直接搜出来1条数据,那么filtered就可以提升到100%。
由此可见,filtered=100%确实是要比18%要好。

当然,filtered不是万能的,关注执行计划结果中其他列的值并优化查询更重要。比如为了避免出现filesort(使用可以满足order by的索引),即使filtered的值比较低也没问题。再比如上面filtered=0.1%的场景,我们更应该关注的是添加一个索引提高查询性能,而不是看filtered的值

11、Extra

其他重要信息

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

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

相关文章

编程的成就感到底在哪里?

一个好的开发人员如何成为一个伟大的开发人员&#xff1f; 暂时忘记伟大&#xff1a;一个体面的开发人员如何成为一个好的开发人员&#xff1f; 从步骤 1 到步骤 n 没有明确的路径。 哎呀&#xff0c;甚至不清楚步骤n是什么。 作为具有逻辑思维的开发人员类型&#xff0c;缺乏…

计算机视觉 -- 图像分割

文章目录 1. 图像分割2. FCN2.1 语义分割– FCN &#xff08;Fully Convolutional Networks&#xff09;2.2 FCN--deconv2.3 Unpool2.4 拓展–DeconvNet 3. 实例分割3.1 实例分割--Mask R-CNN3.2 Mask R-CNN3.3 Faster R-CNN与 Mask R-CNN3.4 Mask R-CNN&#xff1a;Resnet1013…

Gateway简述

前言 ​ 在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端调用多个微服务接口的地址。另外微服务架构的请求中&#xff0c;90%的都携带认证信息/用户登录信息&#xff0c;都需要做相关的限制管理&#xff0c;API网关由此应允而生。 这样的架构会存…

解决github上http克隆代码问题(SSH方式)centos

常见报错如下&#xff1a; fatal: unable to access https://github.com/cnych/demo_service/: Failed connect to 127.0.0.1:1080; Connection refused 代理问题报错 fatal: unable to access https://github.com/cnych/emo_service/: TCP connection reset by peer https…

BLE4.2 ch582 TMOS使用

需要注意的是&#xff0c;TMOS&#xff08;任务管理系统&#xff09;的时基是625us。每个Take任务最多能有15个事件&#xff1b; 创建一个TMOS任务,需要分五步&#xff1a; 1.创建任务TakeID static uint8_t LEDTaskId INVALID_TASK_ID;2.定义一个事件标志 #define LEDTas…

【附安装包】SolidWorks2023安装教程

软件下载 软件&#xff1a;Solidowrks版本&#xff1a;2023语言&#xff1a;简体中文大小&#xff1a;15.76G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU3.0GHz 内存8G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.ba…

测试驱动开发(TDD)

测试驱动开发&#xff08;TDD&#xff09; 本篇文章简单叙述一下什么是测试驱动开发&#xff0c;以及怎么进行测试驱动开发&#xff01; TDD &#xff08;Test Driven Development&#xff09;&#xff1a;&#xff08;源于极限编程&#xff08;XP&#xff09;&#xff09;在不…

树莓派时间更新为中国区时间

一、测试环境为&#xff1a;树莓派3B piraspberrypi:~/workfile/lorawan/lorawan-gw $ uname -a Linux raspberrypi 6.1.21-v7 #1642 SMP Mon Apr 3 17:20:52 BST 2023 armv7l GNU/Linux 测试过程中&#xff0c;请确保树莓派连接网络 &#xff1b; 二、安装ntp相关命令&…

【linux】2 Linux编译器-gcc/g++和Linux调试器-gdb

文章目录 一、Linux编译器-gcc/g使用1.1 背景知识1.2 gcc如何完成1.3 函数库1.4 gcc选项 二、linux调试器-gdb使用2.1 背景2.2 开始使用 总结 ヾ(๑╹◡╹)&#xff89;" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)&#xff89;" 一、Linux编译器-gcc/g使用 1.1 背景…

Java面试题—2023年8月22日—HRCT

2023-08-22 14:13:52北京hu ruǎn chāo tōng 答案仅供参考&#xff0c;博主仅记录发表&#xff0c;没有实际查询&#xff0c;不保证正确性。 一、选择题&#xff08;单选&#xff09; 1、Java 语盲中&#xff0c;方法的重写(Overriding)和(Overloading)是多态性的不同表现下…

AI夏令营笔记——任务2

文章目录 任务说明实现思路优化方向 任务说明 任务要求与任务1一样&#xff1a; 从论文标题、摘要作者等信息&#xff0c;判断该论文是否属于医学领域的文献。 可以将任务看作是一个文本二分类任务。机器需要根据对论文摘要等信息的理解&#xff0c;将论文划分为医学领域的文…

Python中的时间序列分析模型ARIMA

大家好&#xff0c;时间序列分析广泛用于预测和预报时间序列中的未来数据点&#xff0c;ARIMA模型被广泛用于时间序列预测&#xff0c;并被认为是最流行的方法之一。本文将介绍如何在Python中搭建和评估用于时间序列预测的ARIMA模型。 什么是ARIMA模型 ARIMA模型是一种用于分…

Rocky部署Cobbler

1、安装软件 cobbler版本3.3.3 rockyliux9.2 [rootwenzi ~]#dnf -y install cobbler dhcp-server [rootwenzi ~]#systemctl enable --now cobblerd tftp.service httpd dhcpd 2、配置cobbler cobbler配置检查 [rootwenzi ~]#cobbler check The following are potential c…

html动态爱心代码【四】(附源码)

目录 前言 特效 完整代码 总结 前言 情人节马上就要到了&#xff0c;为了帮助大家高效表白&#xff0c;下面再给大家带来了实用的HTML浪漫表白代码(附源码)背景音乐&#xff0c;可用于520&#xff0c;情人节&#xff0c;生日&#xff0c;表白等场景&#xff0c;可直接使用。…

logistic自相关检测

logistic自相关检测 clc clearvars;T10000 xzeros(1,T); x(1)0.98; for n1:(T-1)x(n1)4*x(n)*(1-x(n)); end p(x>0.5); n-(x<0.5); H1pn; % sum(pn,all) % sum(x,all)t-T1:T-1; N2*T-1; Rh1zeros(1,N); %自相关函数 Rh2zeros(1,N); fo…

React+Typescript 父子组件事件传值

好 之前我们将 state 状态管理简单过了一下 那么 本文 我们来研究一下事假处理 点击事件上文中我们已经用过了 这里 我们就不去讲了 主要来说说 父子之间的事件 我们直接来编写一个小dom 我们父组件 编写代码如下 import Hello from "./components/hello";functio…

Zabbix监控系统最新版安装

setenforce 0 设置SELinux 成为permissive模式 临时关闭selinux的 [rootwww yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo % Total % Received % Xferd Average Speed Time Time Time Current …

远程控制:用了向日葵控控A2后,我买了BliKVM v4

远程控制电脑的场景很多&#xff0c;比如把办公室电脑的文件发到家里电脑上&#xff0c;但是办公室电脑旁边没人。比如当生产力用的电脑一般都比较重&#xff0c;不可能随时带在身边&#xff0c;偶尔远程操作一下也是很有必要的。比如你的设备在工况恶劣的环境中&#xff0c;你…

线性代数强化第三章

目录 一&#xff0c;关于A伴随&#xff0c;A逆与初等矩阵 二&#xff0c;分块矩阵 三&#xff0c;矩阵方程 ​ 一&#xff0c;关于A伴随&#xff0c;A逆与初等矩阵 如何证明行列式的值不能是0&#xff1b; 此秩为1. 法一&#xff1a; 法二&#xff1a; 不用看是列变换还是行变…

CSPJ2020A真题大全 优秀的拆分,直播获奖,表达式,方格取数

CSPJ2020A. 优秀的拆分 (Excellent Split) 题目描述 一般来说&#xff0c;一个正整数可以拆分成若干个正整数的和。 例如&#xff0c;111111&#xff0c;101234101234101234 等。对于正整数 nnn 的一种特定拆分&#xff0c;我们称它为“优秀的”&#xff0c;当且仅当在这种拆分…