电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

MySQL EXPLAIN輸出列的詳細解釋

瀏覽:10日期:2023-10-03 11:11:41
1. 簡介

EXPLAIN語句提供有關 MySQL 如何執行語句的信息。

EXPLAIN與SELECT、DELETE、INSERT、REPLACE和UPDATE語句一起使用。

mysql> EXPLAIN SELECT * FROM employees WHERE emp_no = 10001;+----+-------------+-----------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-----------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| 1 | SIMPLE | employees | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |+----+-------------+-----------+------------+-------+---------------+---------+---------+-------+------+----------+-------+1 row in set, 1 warning (0.00 sec)

簡單來講,通過EXPLAIN可以分析出SQL語句走沒走索引,走的是什么索引。

EXPLAIN為SELECT語句中使用的每個表返回一行信息,它按照 MySQL 在處理語句時讀取它們的順序列出了輸出中的表。

MySQL 使用嵌套循環連接(Nested-Loop Join Algorithms)解析所有連接,這意味著 MySQL 從第一個表中讀取一行,然后在第二個表,第三個表中找到匹配的行,依此類推。處理完所有表后,MySQL將通過表列表輸出選定的列后回溯直到找到一個表,其中存在更多匹配的行。從該表中讀取下一行,然后繼續下一個表。

2.EXPLAIN 輸出列 MySQL版本 5.7.33 Windows10 64位

從上圖看到 EXPLAIN 的結果中,包括的表頭id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、Extra,這些字段的意思我們來學習然后通過實例進行了解一下。

2.1 id

SELECT 標識符,查詢中 SELECT 的順序號。如果該行引用其他行的并集結果,則該值可以為NULL。在這種情況下,表列顯示類似<unionM,N>的值,以指示該行引用 id 值為 M 和 N 的行的并集。

id 值分三種情況:

id 相同,執行順序由上至下

mysql> EXPLAIN ( -> SELECT * FROM employees emp -> LEFT JOIN dept_emp de ON emp.emp_no = de.emp_no -> LEFT JOIN departments dept ON dept.dept_no = de.dept_no -> WHERE emp.emp_no = 10001);+----+-------------+-------+------------+--------+---------------+---------+---------+----------------------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+--------+---------------+---------+---------+----------------------+------+----------+-------+| 1 | SIMPLE | emp | NULL | const | PRIMARY | PRIMARY | 4 | const| 1 | 100.00 | NULL || 1 | SIMPLE | de | NULL | ref | PRIMARY | PRIMARY | 4 | const| 1 | 100.00 | NULL || 1 | SIMPLE | dept | NULL | eq_ref | PRIMARY | PRIMARY | 12 | employees.de.dept_no | 1 | 100.00 | NULL |+----+-------------+-------+------------+--------+---------------+---------+---------+----------------------+------+----------+-------+3 rows in set, 1 warning (0.03 sec)

id不相同,如果是子查詢,id的序號會遞增,id的值越大被執行的優先級越高

mysql> EXPLAIN SELECT * FROM employees emp -> WHERE emp.emp_no NOT IN ( SELECT de.emp_no FROM dept_emp de -> WHERE de.dept_no NOT IN ( SELECT dept_no FROM departments WHERE dept_name = ’Development’));+----+-------------+-------------+------------+-------+-------------------+-----------+---------+-------+--------+----------+--------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------------+------------+-------+-------------------+-----------+---------+-------+--------+----------+--------------------------+| 1 | PRIMARY | emp | NULL | ALL | NULL | NULL | NULL | NULL | 299468 | 100.00 | Using where || 2 | SUBQUERY | de | NULL | index | PRIMARY | dept_no | 12 | NULL | 308493 | 100.00 | Using where; Using index || 3 | SUBQUERY | departments | NULL | const | PRIMARY,dept_name | dept_name | 122 | const | 1 | 100.00 | Using index |+----+-------------+-------------+------------+-------+-------------------+-----------+---------+-------+--------+----------+--------------------------+3 rows in set, 1 warning (0.00 sec)

id相同和不相同都存在

如果id相同可以認為是一組,同一組id執行順序由上至下,不同組之間,id值越大被執行的優先級越高。

mysql> EXPLAIN SELECT * FROM employees emp -> WHERE emp.emp_no IN ( SELECT de.emp_no FROM dept_emp de -> WHERE de.dept_no IN ( SELECT dept_no FROM departments WHERE dept_name LIKE ’%Develop%’));+----+--------------+-------------+------------+-------+-----------------+-----------+---------+-------------------------------+--------+----------+----------------------------------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+--------------+-------------+------------+-------+-----------------+-----------+---------+-------------------------------+--------+----------+----------------------------------------------------+| 1 | SIMPLE | <subquery2> | NULL | ALL | NULL | NULL | NULL | NULL | NULL | 100.00 | NULL || 1 | SIMPLE | emp | NULL | ALL | PRIMARY | NULL | NULL | NULL | 299468 | 0.00 | Using where; Using join buffer (Block Nested Loop) || 2 | MATERIALIZED | departments | NULL | index | PRIMARY | dept_name | 122 | NULL | 9 | 11.11 | Using where; Using index || 2 | MATERIALIZED | de | NULL | ref | PRIMARY,dept_no | dept_no | 12 | employees.departments.dept_no | 38561 | 100.00 | Using index|+----+--------------+-------------+------------+-------+-----------------+-----------+---------+-------------------------------+--------+----------+----------------------------------------------------+4 rows in set, 1 warning (0.01 sec)

2.2 select_type

查詢的類型,主要用來區別普通查詢,聯合查詢,子查詢等復雜查詢。

包含SIMPLE、PRIMARY、UNION、DEPENDENT UNION、UNION RESULT、SUBQUERY、DEPENDENT SUBQUERY、DERIVED、MATERIALIZED、UNCACHEABLE SUBQUERY、UNCACHEABLE UNION

SIMPLE

簡單的SELECT,不使用UNION或子查詢。

mysql> EXPLAIN select * from employees where emp_no=10001;+----+-------------+-----------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-----------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| 1 | SIMPLE | employees | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |+----+-------------+-----------+------------+-------+---------------+---------+---------+-------+------+----------+-------+1 row in set, 1 warning (0.00 sec)

PRIMARY

查詢中若包含任何復雜的子部分,最外層的查詢則被標記為PRIMARY

mysql> EXPLAIN SELECT * FROM employees emp -> WHERE emp.emp_no IN ( SELECT max(emp_no) FROM dept_emp);+----+--------------------+-------+------------+------+---------------+------+---------+------+--------+----------+------------------------------+| id | select_type| table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra|+----+--------------------+-------+------------+------+---------------+------+---------+------+--------+----------+------------------------------+| 1 | PRIMARY | emp | NULL | ALL | NULL | NULL | NULL | NULL | 299468 | 100.00 | Using where || 2 | DEPENDENT SUBQUERY | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away |+----+--------------------+-------+------------+------+---------------+------+---------+------+--------+----------+------------------------------+2 rows in set, 1 warning (0.00 sec)

UNION

第二個或更靠后的 SELECT 語句出現在 UNION 之后,則被標記為 UNION

mysql> EXPLAIN (SELECT emp_no,dept_no FROM dept_emp LIMIT 10) -> UNION -> SELECT emp_no,dept_no FROM dept_manager;+----+--------------+--------------+------------+-------+---------------+---------+---------+------+--------+----------+-----------------+| id | select_type | table| partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+--------------+--------------+------------+-------+---------------+---------+---------+------+--------+----------+-----------------+| 1 | PRIMARY | dept_emp | NULL | index | NULL | dept_no | 12 | NULL | 308493 | 100.00 | Using index || 2 | UNION| dept_manager | NULL | index | NULL | dept_no | 12 | NULL | 24 | 100.00 | Using index || NULL | UNION RESULT | <union1,2> | NULL | ALL | NULL | NULL | NULL | NULL | NULL | NULL | Using temporary |+----+--------------+--------------+------------+-------+---------------+---------+---------+------+--------+----------+-----------------+3 rows in set, 1 warning (0.00 sec)

DEPENDENT UNION

與 UNION 相同,它出現在 UNION 或 UNION ALL語句中,但是此查詢受外部查詢的影響

| UNION RESULT union_result Result of a UNION.| SUBQUERY None First SELECT in subquery| DEPENDENT SUBQUERY dependent (true) First SELECT in subquery, dependent on outer query| DERIVED None Derived table| MATERIALIZED materialized_from_subquery Materialized subquery| UNCACHEABLE SUBQUERY cacheable (false) A subquery for which the result cannot be cached and must be re-evaluated for each row of the outer query| UNCACHEABLE UNION cacheable (false) The second or later select in a UNION that belongs to an uncacheable subquery (see UNCACHEABLE SUBQUERY)

總結

到此這篇關于MySQL EXPLAIN輸出列的文章就介紹到這了,更多相關MySQL EXPLAIN輸出列內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 安徽控制器-合肥船用空调控制器-合肥家电控制器-合肥迅驰电子厂 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 27PR跨境电商导航 | 专注外贸跨境电商| 砂尘试验箱_淋雨试验房_冰水冲击试验箱_IPX9K淋雨试验箱_广州岳信试验设备有限公司 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 压缩空气冷冻式干燥机_吸附式干燥机_吸干机_沪盛冷干机 | 网站建设-高端品牌网站设计制作一站式定制_杭州APP/微信小程序开发运营-鼎易科技 | 预制围墙_工程预制围墙_天津市瑞通建筑材料有限公司 | 超声波流量计_流量标准装置生产厂家 _河南盛天精密测控 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 天津中都白癜风医院_天津白癜风医院_天津治疗白癜风 | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 低压载波电能表-单相导轨式电能表-华邦电力科技股份有限公司-智能物联网综合管理平台 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 乳化沥青设备_改性沥青设备_沥青加温罐_德州市昊通路桥工程有限公司 | 杭州厂房降温,车间降温设备,车间通风降温,厂房降温方案,杭州嘉友实业爽风品牌 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 手持式浮游菌采样器-全排二级生物安全柜-浙江孚夏医疗科技有限公司 | 变色龙PPT-国内原创PPT模板交易平台 - PPT贰零 - 西安聚讯网络科技有限公司 | 储能预警-储能消防系统-电池舱自动灭火装置-四川千页科技股份有限公司官网 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 破碎机_上海破碎机_破碎机设备_破碎机厂家-上海山卓重工机械有限公司 | 二维运动混料机,加热型混料机,干粉混料机-南京腾阳干燥设备厂 | 不锈钢列管式冷凝器,换热器厂家-无锡飞尔诺环境工程有限公司 | 吉祥新世纪铝塑板_生产铝塑板厂家_铝塑板生产厂家_临沂市兴达铝塑装饰材料有限公司 | 电抗器-能曼电气-电抗器专业制造商 | 水厂自动化-水厂控制系统-泵站自动化|控制系统-闸门自动化控制-济南华通中控科技有限公司 | 高压直流电源_特种变压器_变压器铁芯-希恩变压器定制厂家 | 磁力反应釜,高压釜,实验室反应釜,高温高压反应釜-威海自控反应釜有限公司 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 | 土壤养分检测仪|土壤水分|土壤紧实度测定仪|土壤墒情监测系统-土壤仪器网 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 并网柜,汇流箱,电控设备,中高低压开关柜,电气电力成套设备,PLC控制设备订制厂家,江苏昌伟业新能源科技有限公司 | 【北京写字楼出租_写字楼租赁_办公室出租网/出售】-远行地产官网 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 带锯机|木工带锯机圆木推台锯|跑车带锯机|河北茂业机械制造有限公司| | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 艺术漆十大品牌_艺术涂料加盟代理_蒙太奇艺术涂料厂家品牌|艺术漆|微水泥|硅藻泥|乳胶漆 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 集装箱展厅-住人集装箱住宿|建筑|房屋|集装箱售楼处-山东锐嘉科技工程有限公司 | 石家庄小程序开发_小程序开发公司_APP开发_网站制作-石家庄乘航网络科技有限公司 |