MySQL的explain命令詳解

2021-07-24 04:55:33 字數 2664 閱讀 5709

在mysql中,當需要對某條sql查詢語句進行分析時,我們經常會使用 explain 命令 或 desc 命令進行操作,分析sql語句時,explain 和 desc 的作用是一樣的。

使用 explain 命令可以分析出sql查詢語句中索引的使用情況、掃瞄的行數、掃瞄的型別等等,以便幫助我們對索引和sql語句進行優化。

使用方法:在sql查詢語句前面,加上 explain 或 desc 即可。

為了便於演示,現在我建立了一張people表:

create

table people (

id int unsigned not

null auto_increment primary

key comment '主鍵id',

last_name varchar(20) not

null

default

'' comment '姓',

first_name varchar(20) not

null

default

'' comment '名',

birthday date

notnull

default

'1970-01-01' comment '出生日期',

gender tinyint unsigned not

null

default

3 comment '性別:1男,2女,3未知',

key(last_name, first_name, birthday)

) engine=innodb default charset=utf8;

可以看出,people表中有乙個主鍵索引(id)和乙個復合索引 key(last_name, first_name, birthday)。

idlast_name

first_name

birthday

gender

1clinton

bill

1970-01-0132

allen

cuba

1960-01-0133

bush

george

1970-01-0134

smith

kim1970-01-0135

allen

cally

1989-06-083

然後,執行下面的語句:

id=3 \g

結果如下:

*****

*****

*****

*****

*****

** 1. row **

*****

*****

*****

*****

*****

id: 1

select_type: ******

table: people

type: const

possible_keys: primary

key: primary

key_len: 4

ref: const

rows: 1

extra:

1 row in set (0.00 sec)

下面,對explain分析結果中的各個引數進行詳細說明。

1. id

explain 得到的結果集的id編號,不重要。

2. select_type

select_type,即sql查詢語句的型別,準確地說,應該是當前的select語句操作table的方式。常見的值有以下幾種:

3. table

它表示和當前的輸出結果相關的表。

4. type

type 是乙個非常重要的引數,也較為複雜,它表示了當前的查詢所使用的查詢資料行的掃瞄方式或訪問型別。訪問型別有很多種,比如:全表掃瞄、索引掃瞄、範圍掃瞄、唯一索引掃瞄、常數引用掃瞄等等。這裡列的這些,速度是從慢到快,掃瞄的行數也是從多到少。現在,我們就根據這個順序介紹幾個常見的掃瞄方式:

5. possible_keys

表示當前查詢可能用到的索引,這個值不太重要。

6. key

表示當前查詢實際用到的索引。

7. key_len

表示當前查詢用到的索引的長度(位元組數)。

8. ref

表示索引的哪一列被用到了,如果是等值匹配索引,則是乙個常數 const。

9. rows

表示當前查詢實際掃瞄的行數。值越小越好。這個引數非常重要。

10. extra

表示當前查詢的額外資訊,比如是根據什麼方式排序的,獲取資料的方式等。下面列舉幾個extra引數常見的值:

通常,如果我們明確知道了哪條sql查詢語句效率很差,就可以用 explain 或 desc 來分析該sql語句。但是,大多數情況下,我們並不知道是哪些sql查詢語句有問題,一般都是開啟mysql的慢查詢日誌,通過慢查詢日誌來確定查詢效率較慢的問題sql,然後再對這些問題sql進行分析和優化。

MySql的Explain命令使用

mysql的explain命令使用 explain命令是mysql自帶的乙個命令,用於解釋mysql將如何處理sql,執行順序和是否使用了索引之類,我們平常可以用於sql調優。用法則是,在sql前面加上這個命令,比如我們的sql為,select from table 那麼我們使用這個命令則是 exp...

MySQL中EXPLAIN命令詳解

explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。使用方法,在select語句前加上explain就可以了 如 explain select surname first name form a b where a id b id...

MySQL中EXPLAIN解釋命令

explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。使用方法,在select語句前加上explain就可以了 如 explain select surname,first name form a,b where a.id b.id...