在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...