欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中EXPLAIN語句及用法實例

 更新時間:2022年05月20日 12:33:33   作者:永不停轉(zhuǎn)  
我們常常用到explain這個命令來查看一個這些SQL語句的執(zhí)行計劃,查看該SQL語句有沒有使用上了索引,下面這篇文章主要給大家介紹了關于MySQL中EXPLAIN語句及用法的相關資料,需要的朋友可以參考下

前言

在MySQL中 DESCRIBE 和 EXPLAIN 語句是相同的意思。DESCRIBE 語句多用于獲取表結(jié)構(gòu),而 EXPLAIN 語句用于獲取查詢執(zhí)行計劃(用于解釋MySQL如何執(zhí)行查詢語句)。

通過 EXPLAIN 語句可以幫助我們發(fā)現(xiàn)表格的哪些字段上需要建立索引,用于加速查詢。也可以使用 EXPLAIN 檢查優(yōu)化器是否使用最優(yōu)的順序來連接表。

EXPLAIN 語法如下:

{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 默認顯示所有列的信息,如果指定了 col_name 將只顯示該列的信息。wild 用于指定模式串,可以使用SQL通配符 % 和 _。如果指定了 wild ,將顯示與模式串匹配的列信息。如果沒有特殊字符(空格或其它特殊字符),模式串不需要使用引號括起來。

DESCRIBE City;
# 等同于
SHOW COLUMNS FROM City;

2、獲取執(zhí)行計劃信息

  • DESCRIBE 可以查詢 SELECT, DELETE, INSERT, REPLACE, UPDATE 的執(zhí)行信息。MySQL 8.0.19 也可以查詢 TABLE 語句。
  • MySQL從優(yōu)化器獲取可解釋語句的執(zhí)行計劃信息,包括參與的表、順序等信息。
  • 如果使用FOR CONNECTION connection_id語句,MySQL顯示該命名連接的執(zhí)行計劃。
  • EXPLAIN 語句產(chǎn)生的執(zhí)行計劃信息可以通過 SHOW WARNINGS 顯示。
  • FORMAT 選項用于指定輸出格式,TRADITIONAL 是默認的輸出格式,以表格形式顯示。

EXPLAIN 需要的權限與被執(zhí)行解釋語句的權限相同,解釋 view 語句時需要 SHOW VIEW 權限,EXPLAIN ... FOR CONNECTION需要 PROCESS 權限。
可以使用 SELECT STRAIGHT_JOIN 來告訴優(yōu)化器使用 SELECT 指定的連接順序。

3、使用 EXPLAIN ANALYZE 獲取信息

MySQL 8.0.18 推薦使用 EXPLAIN ANALYZE,該語句可以輸出語句的執(zhí)行時間和以下信息

  • 預計執(zhí)行時間
  • 預計返回的行數(shù)
  • 返回第一行的時間
  • 迭代器的執(zhí)行時間,單位毫秒
  • 迭代器返回的行數(shù)
  • 執(zhí)行循環(huán)的次數(shù)

查詢信息以 TREE 的形式輸出,每個節(jié)點代表一個迭代器。EXPLAIN ANALYZE 可以用于 SELECT 語句,以及多表的 UPDATE 和 DELETE 語句,MySQL 8.0.19 以后也可以用于 TABLE 語句。EXPLAIN ANALYZE 不能使用 FOR CONNECTION 。

MySQL 8.0.20 以后可以通過 KILL QUERY 或 CTRL-C 終止該語句的執(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é) 

到此這篇關于MySQL中EXPLAIN語句及用法的文章就介紹到這了,更多相關MySQL EXPLAIN語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL數(shù)字類型自增的坑

    MySQL數(shù)字類型自增的坑

    這篇文章主要介紹了MySQL數(shù)字類型自增的坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • 一文帶你了解MySQL中觸發(fā)器的操作

    一文帶你了解MySQL中觸發(fā)器的操作

    觸發(fā)器,就是一種特殊的存儲過程。觸發(fā)器和存儲過程一樣是一個能夠完成特定功能、存儲在數(shù)據(jù)庫服務器上的SQL片段。本文將通過簡單的實力介紹一下觸發(fā)器的操作,需要的可以參考一下
    2023-02-02
  • Windows系統(tǒng)中配置開啟MySQL數(shù)據(jù)庫日志的完整步驟

    Windows系統(tǒng)中配置開啟MySQL數(shù)據(jù)庫日志的完整步驟

    這篇文章主要給大家介紹了關于Windows系統(tǒng)中配置開啟MySQL數(shù)據(jù)庫日志的完整步驟,大家要開啟MySQL數(shù)據(jù)庫的日志功能,可以按照本文介紹的步驟進行操作,需要的朋友可以參考下
    2023-09-09
  • Mysql常見問題集錦

    Mysql常見問題集錦

    Mysql在使用過程中難免會遇到一些問題,在本文把常見問題做個記錄方便以后發(fā)現(xiàn)問題查看,感興趣的朋友也可以了解下
    2013-09-09
  • 解析mysql中如何獲得數(shù)據(jù)庫的大小

    解析mysql中如何獲得數(shù)據(jù)庫的大小

    本篇文章是對mysql中如何獲得數(shù)據(jù)庫的大小的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • 解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題

    解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題

    線上經(jīng)常偶發(fā)死鎖問題,當時處理一張表,也沒有聯(lián)表處理,但是有兩個mq入口,并且消息體存在一樣的情況,但是是偶發(fā)的,又模擬不出來什么場景會導致死鎖,只能進行代碼分析,問題還原的方式去排查問題,本文給大家介紹了如何解決MySQL innoDB間隙鎖產(chǎn)生的死鎖問題
    2023-10-10
  • SQL語句之如何用JOIN連接多個表

    SQL語句之如何用JOIN連接多個表

    這篇文章主要介紹了SQL語句之如何用JOIN連接多個表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Mysql如何適當?shù)奶砑铀饕榻B

    Mysql如何適當?shù)奶砑铀饕榻B

    今天小編就為大家分享一篇關于Mysql如何適當?shù)奶砑铀饕榻B,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • MySQL中的LOCATE和POSITION函數(shù)使用方法

    MySQL中的LOCATE和POSITION函數(shù)使用方法

    不常用:MySQL中的LOCATE和POSITION函數(shù)
    2010-02-02
  • MySQL?根據(jù)多字段查詢重復數(shù)據(jù)的示例代碼

    MySQL?根據(jù)多字段查詢重復數(shù)據(jù)的示例代碼

    本文介紹了如何使用 MySQL 根據(jù)多個字段查詢重復數(shù)據(jù),我們介紹了如何根據(jù)多個字段查詢重復數(shù)據(jù),并提供了相應的代碼示例,通過這些方法,我們可以快速準確地找到和處理重復數(shù)據(jù),提高數(shù)據(jù)庫的數(shù)據(jù)質(zhì)量,需要的朋友可以參考下
    2023-11-11

最新評論