中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL 5.7如何查看SQL執行計劃

發布時間:2021-10-29 17:21:20 來源:億速云 閱讀:761 作者:小新 欄目:MySQL數據庫

這篇文章將為大家詳細講解有關MySQL 5.7如何查看SQL執行計劃,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

可以使用EXPLAIN語句查看SQL的執行計劃,執行計劃的信息來自于優化器。

在MySQL 5.7,可以查看SELECT, DELETE, INSERT, REPLACE, 和 UPDATE語句的執行計劃。

在MySQL 5.7.3,EXPLAIN EXTENDED可以獲取更詳細的執行計劃信息,EXPLAIN PARTITIONS在獲取有分區表的執行計劃時很有用。

FORMAT選項可以用來選擇輸出的格式。TRADITIONAL代表以表格形式輸出,它是默認的輸出格式。JSON格式代表以JSON格式輸出,輸出結果中包含擴展的執行計劃信息和分區表信息。

如果索引沒有正常使用,可以通過運行ANALYZE TABLE命令來更新表的統計信息,例如鍵值的cardinality,這會影響到優化器的選擇。

mysql> explain select * from emp e where e.deptno not in (select deptno from dept d);
+----+--------------------+-------+-----------------+---------------+---------+---------+------+------+-------------------------------------------------+
| id | select_type        | table | type            | possible_keys | key     | key_len | ref  | rows | Extra                                           |
+----+--------------------+-------+-----------------+---------------+---------+---------+------+------+-------------------------------------------------+
|  1 | PRIMARY            | e     | ALL             | NULL          | NULL    | NULL    | NULL |   14 | Using where                                     |
|  2 | DEPENDENT SUBQUERY | d     | unique_subquery | PRIMARY       | PRIMARY | 4       | func |    1 | Using index; Using where; Full scan on NULL key |
+----+--------------------+-------+-----------------+---------------+---------+---------+------+------+-------------------------------------------------+
2 rows in set (0.00 sec)

輸出字段說明:

id     查詢的執行順序號
select_type     查詢類型,包括:

SIMPLE     簡單查詢(不使用UNION或子查詢)
PRIMARY     最外層的SELECT語句
UNION     在UNION結構中的第二個及以上的SELECT語句
DEPENDENT UNION      在UNION結構中的第二個及以上的SELECT語句,依賴外層查詢
UNION RESULT     UNION的結果
SUBQUERY     子查詢中的第一個SELECT語句
DEPENDENT SUBQUERY     子查詢中的第一個SELECT語句,依賴于外層查詢
DERIVED      子查詢中FROM后面的語句
MATERIALIZED     物化視圖子查詢
UNCACHEABLE SUBQUERY     查詢結果沒有被緩存且需要重新外層查詢計算每行數據的子查詢
UNCACHEABLE UNION UNION    結構中第二個及之后的SELECT語句且沒有生成查詢緩存

table     表名
type     表連接的類型,包括:

system     表中只有一行數據,這是cost連接類型的一種特殊情況
const     表中只有一行匹配記錄,且在查詢中被最先讀取
eq_ref     和之前的表作nested loop連接時,每次兩個表中連接字段相比,都有一行匹配的記錄。當索引中的所有部分被用于連接且索引是主鍵索引或UNIQUE非空索引時,會使用這種類型。
ref     每次和之前的表做連接時,讀取所有符合條件的索引值。如果連接使用索引的最左邊前綴字段,或者索引不是主鍵或UNIQUE索引,會用到這種連接方式,也就是說如果連接不能基于每個符合連接條件的索引值選擇出單獨的一行,則會使用這種連接方式。
fulltext     使用FULLTEXT索引來建立連接
ref_or_null     連接類型類似ref,除此之外,MySQL會額外掃描出包含NULL值的行。這種連接方式通常用于有子查詢的情形下。
index_merge     使用索引合并的連接方式。在這種情況下,key字段會包含使用的索引,key_len包含使用索引的最長索引部分。
unique_subquery      這種連接方式在某種情況下會代替eq_ref,如value IN (SELECT primary_key FROM single_table WHERE some_expr),這種方式使用索引查詢功能代替子查詢,以獲得更好的執行效率。
index_subquery      這種連接方式類似unique_subquery。它會代替IN子查詢,但是它適用于非unique索引的子查詢,如value IN (SELECT key_column FROM single_table WHERE some_expr)
range     使用索引掃描出指定范圍的行。key字段指示使用的索引。key_len指示索引的最大長度。ref字段會顯示NULL
index     這種索引連接類型和ALL相同,除了索引樹被掃描到。這會出現在兩種情況下:一、如果該索引是一個覆蓋索引查詢,且只掃描出索引樹。在這種情況下,Extra字段會顯示Using index。二、通過索引順序來執行全表掃描。
ALL     和之前表做連接時,每次兩表關聯時都做全表掃描。

possible_keys     可供選擇的索引
key     實際選擇的索引
key_len      選擇的索引長度
ref     顯示和索引相比較的字段或常量,如果這個字段的值是func,這個值會用在函數的結果中。
rows     估計的表的行數
Extra     額外信息

mysql> explain select * from buy_log where userid=2;
+----+-------------+---------+------+-----------------+--------+---------+-------+------+-------+
| id | select_type | table   | type | possible_keys   | key    | key_len | ref   | rows | Extra |
+----+-------------+---------+------+-----------------+--------+---------+-------+------+-------+
|  1 | SIMPLE      | buy_log | ref  | userid,userid_2 | userid | 4       | const |    1 | NULL  |
+----+-------------+---------+------+-----------------+--------+---------+-------+------+-------+
1 row in set (0.00 sec)

(04:14:50) [dmcdbMTNNG]> explain select count(*) from ADDSubscribers where timestamp between 1483351200 and 1483354800;
+----+-------------+----------------+-------+---------------+-----------+---------+------+---------+-----------------------------------+
| id | select_type | table          | type  | possible_keys | key       | key_len | ref  | rows    | Extra                             |
+----+-------------+----------------+-------+---------------+-----------+---------+------+---------+-----------------------------------+
|  1 | SIMPLE      | ADDSubscribers | range | Timestamp     | Timestamp | 8       | NULL | 3515427 | Using where with pushed condition |
+----+-------------+----------------+-------+---------------+-----------+---------+------+---------+-----------------------------------+
1 row in set (0.00 sec)

這個信息只適用于NDB表。MySQL Cluster使用這個條件來提高效率。

Using where with pushed condition (JSON property: message)
This item applies to NDB tables only. It means that MySQL Cluster is using the Condition Pushdown
optimization to improve the efficiency of a direct comparison between a nonindexed column and a
constant. In such cases, the condition is “pushed down” to the cluster's data nodes and is evaluated on
all data nodes simultaneously. This eliminates the need to send nonmatching rows over the network, and
can speed up such queries by a factor of 5 to 10 times over cases where Condition Pushdown could be
but is not used. For more information, see Section 9.2.1.5, “Engine Condition Pushdown Optimization”.

關于“MySQL 5.7如何查看SQL執行計劃”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

那坡县| 阜平县| 红河县| 孟州市| 惠水县| 钦州市| 云林县| 司法| 抚顺市| 岗巴县| 西乡县| 巨鹿县| 依兰县| 英德市| 台湾省| 浦江县| 叙永县| 房山区| 商都县| 潜山县| 绥宁县| 阳江市| 紫金县| 乳山市| 陆丰市| 金湖县| 泰兴市| 麦盖提县| 阿瓦提县| 敖汉旗| 姚安县| 福州市| 天镇县| 革吉县| 太湖县| 彩票| 翁源县| 万荣县| 靖远县| 理塘县| 济阳县|