日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

MySQL EXPLAIN輸出列的詳細解釋

瀏覽:27日期: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 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品激情| 国产精品巨作av| 国产精品久久久久久av公交车| 在线精品亚洲| 蜜桃视频一区二区三区| 怡红院精品视频在线观看极品| 欧美日韩一二| 亚洲一级高清| 中文精品视频| 97成人超碰| 国产激情精品一区二区三区| 国产精品一区二区三区av麻| 国产欧美日韩一级| 久久久久久久欧美精品| 美女精品久久| 日韩精品诱惑一区?区三区| 夜鲁夜鲁夜鲁视频在线播放| 中文字幕系列一区| 乱人伦精品视频在线观看| 亚洲精品系列| 给我免费播放日韩视频| 欧美日韩一区二区综合| 亚洲精品美女91| 亚洲国产福利| 99久久婷婷这里只有精品| 日韩制服丝袜先锋影音| 国产精品九九| 国产亚洲欧洲| 欧美激情视频一区二区三区免费 | 久久精品资源| 欧美午夜精彩| 日本91福利区| 久久蜜桃av| 亚洲免费专区| 亚洲另类av| 久久久久黄色| 亚洲精选久久| 欧美一级网站| 国产一区二区三区不卡视频网站| 亚洲一区二区毛片| 成人在线免费观看网站| 国产精品啊v在线| 欧洲激情综合| 久久精品欧美一区| 日本不卡视频一二三区| 国产亚洲一区在线| 国产精品久久久一区二区| 热三久草你在线| 日韩**一区毛片| 九九综合九九| 亚洲精品一级二级| 亚洲国产一区二区三区在线播放| 欧美羞羞视频| 欧美久久天堂| 欧美a在线观看| 国产麻豆一区| 日韩av黄色在线| 深夜福利亚洲| 日韩亚洲国产欧美| 日韩视频网站在线观看| 日韩伦理一区| 国内精品麻豆美女在线播放视频| 在线观看视频免费一区二区三区| 久久国产电影| 欧美日韩免费观看视频| 久久电影tv| 日韩欧美一区二区三区在线观看| 精品视频在线观看网站| 麻豆成人91精品二区三区| 久久99蜜桃| 久久精品国产久精国产爱| 欧美在线看片| 欧美激情在线精品一区二区三区| 日韩超碰人人爽人人做人人添| 男女精品网站| 一区二区高清| 欧美一区成人| 欧美香蕉视频| 蜜臀91精品一区二区三区| 香蕉久久夜色精品国产| 亚洲精品免费观看| 麻豆精品蜜桃视频网站| 久久久777| 日韩精品一级二级| 麻豆精品久久久| 久久久成人网| 日韩精品亚洲专区| 国产精成人品2018| 久久国产免费| 综合色一区二区| 欧美黑人做爰爽爽爽| 欧美午夜精彩| 国产激情综合| 国产亚洲毛片| 国产在线看片免费视频在线观看| 久久午夜影视| 91欧美在线| 日韩高清电影一区| 久久婷婷一区| 麻豆极品一区二区三区| 欧美特黄视频| 国产中文在线播放| 日本亚洲不卡| 亚洲高清毛片| 国产美女视频一区二区| 黄色不卡一区| 久久精品九色| 亚洲精品在线a| 老鸭窝亚洲一区二区三区| 成人亚洲一区二区| 国产美女视频一区二区| 免费在线观看精品| 精品一区免费| 日韩久久精品网| 国产va免费精品观看精品视频| 无码日韩精品一区二区免费| 日本高清不卡一区二区三区视频| 麻豆精品视频在线观看| 日韩欧美激情| 午夜在线精品偷拍| 亚洲高清av| 久久五月天小说| sm久久捆绑调教精品一区| 久久亚洲国产精品尤物| 国产日产精品_国产精品毛片 | 久久精品国产免费| 69堂免费精品视频在线播放| 合欧美一区二区三区| 成人午夜网址| 麻豆精品蜜桃视频网站| 69堂免费精品视频在线播放| 亚洲精品高潮| 视频一区日韩精品| 日本aⅴ免费视频一区二区三区| 综合国产精品| 日韩精品欧美大片| 911亚洲精品| 久久精品国产精品亚洲毛片| 青青伊人久久| 欧美精品第一区| 精品国产第一福利网站| 激情久久中文字幕| 亚洲色诱最新| 中文国产一区| 国产亚洲人成a在线v网站| 国产日韩欧美高清免费| 精品国产欧美日韩| 国产91久久精品一区二区| 六月丁香综合| 欧美黑人做爰爽爽爽| 久久久久99| 欧美一区二区三区免费看| 久久久久黄色| 丝袜脚交一区二区| 老牛国内精品亚洲成av人片| 亚洲va在线| 欧美一区影院| 日韩精品免费一区二区在线观看| 欧美综合另类| 日本欧美一区二区| 欧美不卡高清一区二区三区| 亚洲最大av| 日韩精品1区| 国产毛片一区二区三区 | 免费国产自久久久久三四区久久| 蜜臀久久久久久久| 国产成人精品一区二区三区免费| 成人羞羞视频播放网站| 亚洲精品看片| 免费成人网www| 精品国产aⅴ| 国产一级久久| 日韩中文影院| 久久一区国产| 日韩在线观看中文字幕| 亚洲夜间福利| 日韩在线精品| 欧美国产不卡| 国产毛片精品久久| 六月婷婷一区| 国产亚洲在线观看| 国产一在线精品一区在线观看| 久久精品资源| 国产欧美久久一区二区三区| 免费久久99精品国产| 亚洲小说欧美另类婷婷| 久久国产三级| 婷婷视频一区二区三区| 性色一区二区| 夜夜嗨一区二区| 中文精品在线| 日韩视频不卡| 免费视频久久| 一级欧美视频| 日韩激情一区二区| 日韩亚洲精品在线观看| 亚洲视频电影在线| 亚洲97av| 欧美午夜网站| 久久免费视频66|