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

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

MySQL EXPLAIN輸出列的詳細解釋

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

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

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

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 相同,執(zhí)行順序由上至下

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的值越大被執(zhí)行的優(yōu)先級越高

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執(zhí)行順序由上至下,不同組之間,id值越大被執(zhí)行的優(yōu)先級越高。

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

查詢的類型,主要用來區(qū)別普通查詢,聯(lián)合查詢,子查詢等復雜查詢。

包含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 語句出現(xiàn)在 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 相同,它出現(xiàn)在 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輸出列內容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

相關文章:
主站蜘蛛池模板: 阻垢剂-反渗透缓蚀阻垢剂厂家-山东鲁东环保科技有限公司 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 实木家具_实木家具定制_全屋定制_美式家具_圣蒂斯堡官网 | 鑫铭东办公家具一站式定制采购-深圳办公家具厂家直销 | 沉降天平_沉降粒度仪_液体比重仪-上海方瑞仪器有限公司 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 喷漆房_废气处理设备-湖北天地鑫环保设备有限公司 | 石家庄律师_石家庄刑事辩护律师_石家庄取保候审-河北万垚律师事务所 | 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 水厂自动化-水厂控制系统-泵站自动化|控制系统-闸门自动化控制-济南华通中控科技有限公司 | 篷房|仓储篷房|铝合金篷房|体育篷房|篷房厂家-华烨建筑科技官网 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | ?水马注水围挡_塑料注水围挡_防撞桶-常州瑞轩水马注水围挡有限公司 | 电力测功机,电涡流测功机,磁粉制动器,南通远辰曳引机测试台 | 【法利莱住人集装箱厂家】—活动集装箱房,集装箱租赁_大品牌,更放心 | 远程会诊系统-手术示教系统【林之硕】医院远程医疗平台 | 常州减速机_减速机厂家_常州市减速机厂有限公司 | 氧化铁红厂家-淄博宗昂化工 | 同学聚会纪念册制作_毕业相册制作-成都顺时针宣传画册设计公司 | 阳光1号桔柚_无核沃柑_柑橘新品种枝条苗木批发 - 苧金网 | 杭州代理记账多少钱-注册公司代办-公司注销流程及费用-杭州福道财务管理咨询有限公司 | 珠海白蚁防治_珠海灭鼠_珠海杀虫灭鼠_珠海灭蟑螂_珠海酒店消杀_珠海工厂杀虫灭鼠_立净虫控防治服务有限公司 | 工业风机_环保空调_冷风机_工厂车间厂房通风降温设备旺成服务平台 | 无尘烘箱_洁净烤箱_真空无氧烤箱_半导体烤箱_电子防潮柜-深圳市怡和兴机电 | 拉力机-万能试验机-材料拉伸试验机-电子拉力机-拉力试验机厂家-冲击试验机-苏州皖仪实验仪器有限公司 | 自动记录数据电子台秤,记忆储存重量电子桌称,设定时间记录电子秤-昆山巨天 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 活性氧化铝|无烟煤滤料|活性氧化铝厂家|锰砂滤料厂家-河南新泰净水材料有限公司 | 石家庄小程序开发_小程序开发公司_APP开发_网站制作-石家庄乘航网络科技有限公司 | 电竞馆加盟,沈阳网吧加盟费用选择嘉棋电竞_售后服务一体化 | 中央空调维修、中央空调保养、螺杆压缩机维修-苏州东菱空调 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 奥运星-汽车性能网评-提供个性化汽车资讯 | 隆众资讯-首页_大宗商品资讯_价格走势_市场行情| 企业微信营销_企业微信服务商_私域流量运营_艾客SCRM官网 | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 |