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

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

MySQL EXPLAIN輸出列的詳細解釋

瀏覽:9日期: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 數據庫
相關文章:
主站蜘蛛池模板: 工控机-工业平板电脑-研华工控机-研越无风扇嵌入式box工控机 | 安徽合肥项目申报咨询公司_安徽合肥高新企业项目申报_安徽省科技项目申报代理 | 语料库-提供经典范文,文案句子,常用文书,您的写作得力助手 | 博医通医疗器械互联网供应链服务平台_博医通 | 选宝石船-陆地水上开采「精选」色选机械设备-青州冠诚重工机械有限公司 | 游动电流仪-流通式浊度分析仪-杰普仪器(上海)有限公司 | 澳洁干洗店加盟-洗衣店干洗连锁「澳洁干洗免费一对一贴心服务」 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 南方珠江-南方一线电缆-南方珠江科技电缆-南方珠江科技有限公司 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 电销卡 防封电销卡 不封号电销卡 电话销售卡 白名单电销卡 电销系统 外呼系统 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 美能达分光测色仪_爱色丽分光测色仪-苏州方特电子科技有限公司 | 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | 广州二手电缆线回收,旧电缆回收,广州铜线回收-广东益福电缆线回收公司 | 特材真空腔体_哈氏合金/镍基合金/纯镍腔体-无锡国德机械制造有限公司 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 太空舱_民宿太空舱厂家_移动房屋太空舱价格-豪品建筑 | 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 | 企业VI设计_LOGO设计公司_品牌商标设计_【北京美研】 | 收录网| 丹佛斯变频器-丹佛斯压力开关-变送器-广州市风华机电设备有限公司 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 高压微雾加湿器_工业加湿器_温室喷雾-昌润空气净化设备 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 搜活动房网—活动房_集装箱活动房_集成房屋_活动房屋 | 空压机网_《压缩机》杂志 | 清洁设备_洗地机/扫地机厂家_全自动洗地机_橙犀清洁设备官网 | 山东led显示屏,山东led全彩显示屏,山东LED小间距屏,临沂全彩电子屏-山东亚泰视讯传媒有限公司 | 电磁铁_小型推拉电磁铁_电磁阀厂家-深圳市宗泰电机有限公司 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 斗式提升机,斗式提升机厂家-淄博宏建机械有限公司 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 二氧化碳/活性炭投加系统,次氯酸钠发生器,紫外线消毒设备|广州新奥 | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 上海新光明泵业制造有限公司-电动隔膜泵,气动隔膜泵,卧式|立式离心泵厂家 |