MySQL中EXPLAIN語(yǔ)句及用法實(shí)例
前言
在MySQL中 DESCRIBE 和 EXPLAIN 語(yǔ)句是相同的意思。DESCRIBE 語(yǔ)句多用于獲取表結(jié)構(gòu),而 EXPLAIN 語(yǔ)句用于獲取查詢執(zhí)行計(jì)劃(用于解釋MySQL如何執(zhí)行查詢語(yǔ)句)。
通過 EXPLAIN 語(yǔ)句可以幫助我們發(fā)現(xiàn)表格的哪些字段上需要建立索引,用于加速查詢。也可以使用 EXPLAIN 檢查優(yōu)化器是否使用最優(yōu)的順序來(lái)連接表。
EXPLAIN 語(yǔ)法如下:
{EXPLAIN | DESCRIBE | DESC} tbl_name [col_name | wild] {EXPLAIN | DESCRIBE | DESC} [explain_type] {explainable_stmt | FOR CONNECTION connection_id} {EXPLAIN | DESCRIBE | DESC} ANALYZE [FORMAT = TREE] select_statement explain_type: { FORMAT = format_name } format_name: { TRADITIONAL | JSON | TREE } explainable_stmt: { SELECT statement | TABLE statement | DELETE statement | INSERT statement | REPLACE statement | UPDATE statement }
1、獲取表結(jié)構(gòu)
DESCRIBE 是 SHOW COLUMNS 的快捷方式,也可以用于顯示View 的信息,SHOW COLUMNS提供了更多的列信息。
SHOW CREATE TABLE, SHOW TABLE STATUS, SHOW INDEX 也用于提供表信息。
DESCRIBE 默認(rèn)顯示所有列的信息,如果指定了 col_name 將只顯示該列的信息。wild 用于指定模式串,可以使用SQL通配符 % 和 _。如果指定了 wild ,將顯示與模式串匹配的列信息。如果沒有特殊字符(空格或其它特殊字符),模式串不需要使用引號(hào)括起來(lái)。
DESCRIBE City; # 等同于 SHOW COLUMNS FROM City;
2、獲取執(zhí)行計(jì)劃信息
- DESCRIBE 可以查詢 SELECT, DELETE, INSERT, REPLACE, UPDATE 的執(zhí)行信息。MySQL 8.0.19 也可以查詢 TABLE 語(yǔ)句。
- MySQL從優(yōu)化器獲取可解釋語(yǔ)句的執(zhí)行計(jì)劃信息,包括參與的表、順序等信息。
- 如果使用
FOR CONNECTION connection_id
語(yǔ)句,MySQL顯示該命名連接的執(zhí)行計(jì)劃。 - EXPLAIN 語(yǔ)句產(chǎn)生的執(zhí)行計(jì)劃信息可以通過 SHOW WARNINGS 顯示。
- FORMAT 選項(xiàng)用于指定輸出格式,TRADITIONAL 是默認(rèn)的輸出格式,以表格形式顯示。
EXPLAIN 需要的權(quán)限與被執(zhí)行解釋語(yǔ)句的權(quán)限相同,解釋 view 語(yǔ)句時(shí)需要 SHOW VIEW 權(quán)限,EXPLAIN ... FOR CONNECTION需要 PROCESS 權(quán)限。
可以使用 SELECT STRAIGHT_JOIN 來(lái)告訴優(yōu)化器使用 SELECT 指定的連接順序。
3、使用 EXPLAIN ANALYZE 獲取信息
MySQL 8.0.18 推薦使用 EXPLAIN ANALYZE,該語(yǔ)句可以輸出語(yǔ)句的執(zhí)行時(shí)間和以下信息
- 預(yù)計(jì)執(zhí)行時(shí)間
- 預(yù)計(jì)返回的行數(shù)
- 返回第一行的時(shí)間
- 迭代器的執(zhí)行時(shí)間,單位毫秒
- 迭代器返回的行數(shù)
- 執(zhí)行循環(huán)的次數(shù)
查詢信息以 TREE 的形式輸出,每個(gè)節(jié)點(diǎn)代表一個(gè)迭代器。EXPLAIN ANALYZE 可以用于 SELECT 語(yǔ)句,以及多表的 UPDATE 和 DELETE 語(yǔ)句,MySQL 8.0.19 以后也可以用于 TABLE 語(yǔ)句。EXPLAIN ANALYZE 不能使用 FOR CONNECTION 。
MySQL 8.0.20 以后可以通過 KILL QUERY 或 CTRL-C 終止該語(yǔ)句的執(zhí)行。
mysql> EXPLAIN ANALYZE SELECT * FROM t1 JOIN t2 ON (t1.c1 = t2.c2)\G *************************** 1. row *************************** EXPLAIN: -> Inner hash join (t2.c2 = t1.c1) (cost=4.70 rows=6) (actual time=0.032..0.035 rows=6 loops=1) -> Table scan on t2 (cost=0.06 rows=6) (actual time=0.003..0.005 rows=6 loops=1) -> Hash -> Table scan on t1 (cost=0.85 rows=6) (actual time=0.018..0.022 rows=6 loops=1) mysql> EXPLAIN ANALYZE SELECT * FROM t3 WHERE i > 8\G *************************** 1. row *************************** EXPLAIN: -> Filter: (t3.i > 8) (cost=1.75 rows=5) (actual time=0.019..0.021 rows=6 loops=1) -> Table scan on t3 (cost=1.75 rows=15) (actual time=0.017..0.019 rows=15 loops=1) mysql> EXPLAIN ANALYZE SELECT * FROM t3 WHERE pk > 17\G *************************** 1. row *************************** EXPLAIN: -> Filter: (t3.pk > 17) (cost=1.26 rows=5) (actual time=0.013..0.016 rows=5 loops=1) -> Index range scan on t3 using PRIMARY (cost=1.26 rows=5) (actual time=0.012..0.014 rows=5 loops=1)
總結(jié)
到此這篇關(guān)于MySQL中EXPLAIN語(yǔ)句及用法的文章就介紹到這了,更多相關(guān)MySQL EXPLAIN語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows系統(tǒng)中配置開啟MySQL數(shù)據(jù)庫(kù)日志的完整步驟
這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)中配置開啟MySQL數(shù)據(jù)庫(kù)日志的完整步驟,大家要開啟MySQL數(shù)據(jù)庫(kù)的日志功能,可以按照本文介紹的步驟進(jìn)行操作,需要的朋友可以參考下2023-09-09解析mysql中如何獲得數(shù)據(jù)庫(kù)的大小
本篇文章是對(duì)mysql中如何獲得數(shù)據(jù)庫(kù)的大小的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題
線上經(jīng)常偶發(fā)死鎖問題,當(dāng)時(shí)處理一張表,也沒有聯(lián)表處理,但是有兩個(gè)mq入口,并且消息體存在一樣的情況,但是是偶發(fā)的,又模擬不出來(lái)什么場(chǎng)景會(huì)導(dǎo)致死鎖,只能進(jìn)行代碼分析,問題還原的方式去排查問題,本文給大家介紹了如何解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題2023-10-10MySQL中的LOCATE和POSITION函數(shù)使用方法
不常用:MySQL中的LOCATE和POSITION函數(shù)2010-02-02MySQL?根據(jù)多字段查詢重復(fù)數(shù)據(jù)的示例代碼
本文介紹了如何使用 MySQL 根據(jù)多個(gè)字段查詢重復(fù)數(shù)據(jù),我們介紹了如何根據(jù)多個(gè)字段查詢重復(fù)數(shù)據(jù),并提供了相應(yīng)的代碼示例,通過這些方法,我們可以快速準(zhǔn)確地找到和處理重復(fù)數(shù)據(jù),提高數(shù)據(jù)庫(kù)的數(shù)據(jù)質(zhì)量,需要的朋友可以參考下2023-11-11