您好,登錄后才能下訂單哦!
本文主要給大家介紹了解MySQL執(zhí)行計(jì)劃結(jié)果,其所涉及的東西,從理論知識來獲悉,有很多書籍、文獻(xiàn)可供大家參考,從現(xiàn)實(shí)意義角度出發(fā),億速云累計(jì)多年的實(shí)踐經(jīng)驗(yàn)可分享給大家。
類型 | 說明 |
---|---|
SIMPLE | 簡單SELECT(不使用UNION或子查詢等) |
PRIMARY | 主查詢,即最外面的SELECT |
UNION | UNION中的第二個或后面的SELECT語句 |
DEPENDENT UNION | NION中的第二個或后面的SELECT語句,取決于外面的查詢 |
UNION RESULT | UNION的結(jié)果 |
SUBQUERY | 子查詢中的第一個SELECT |
DEPENDENT SUBQUERY | 子查詢中的第一個SELECT,取決于外面的查詢 |
SUBQUERY | 導(dǎo)出表的SELECT(FROM子句的子查詢) |
table
輸出結(jié)果集的表名
partitions
存在分區(qū)時,使用到哪些分區(qū)
類型 | 值 | 示例說明 |
---|---|---|
ALL | 全表掃描 | 一般是沒有where條件或者where條件沒有使用索引的查詢語句 |
index | 索引全掃描 | 一般是查詢的字段都有索引的查詢語句 |
range | 索引范圍掃描 | 常用于<、<=、>、>=、between等操作 |
ref | 非唯一索引掃描 | 使用非唯一索引或唯一索引的前綴掃描,返回匹配某個單獨(dú)值的記錄行 |
eq_ref | 唯一索引掃描 | 類似ref,區(qū)別在于使用的索引是唯一索引,對于每個索引鍵值,表中只有一條記錄匹配 |
const,system | 單表最多有一個匹配行 | onst/system出現(xiàn)在根據(jù)主鍵primary key或者 唯一索引 unique index 進(jìn)行的查詢 |
NULL | 不用掃描表或索引 | select 1 from dual |
possible_keys
列指出MySQL能使用哪個索引在該表中找到行
key
顯示MySQL實(shí)際決定使用的鍵(索引)。如果沒有選擇索引,鍵是NULL
key_len
顯示MySQL決定使用的鍵長度。如果鍵是NULL,則長度為NULL。使用的索引的長度。在不損失精確性的情況下,長度越短越好
ref
顯示使用哪個列或常數(shù)與key一起從表中選擇行。
rows
顯示MySQL認(rèn)為它執(zhí)行查詢時必須檢查的行數(shù)。
filtered
存儲引擎返回的數(shù)據(jù)在server層過濾后,剩下多少滿足查詢的記錄數(shù)量的比例(百分比)
extra元素 | 說明 |
---|---|
Distinct | 一旦MYSQL找到了與行相聯(lián)合匹配的行,就不再搜索了 |
Not exists | MYSQL 優(yōu)化了LEFT JOIN,一旦它找到了匹配LEFT JOIN標(biāo)準(zhǔn)的行,就不再搜索了 |
Range | checked for each |
Record | 沒有找到理想的索引,因此對于從前面表中來的每一 個行組合,MYSQL檢查使用哪個索引,并用它來從表中返回行。這是使用索引的最慢的連接之一 |
Using filesort | 表示MySQL需額外排序操作, 不能通過索引順序達(dá)到排序效果 |
Using index | 表示索引覆蓋,不會回表查詢 |
Using temporary | 通常發(fā)生在對不同的列集進(jìn)行ORDER BY上,而不是GROUP BY上 |
Using where | 表示進(jìn)行了回表查詢 |
簡單來說就是數(shù)據(jù)庫根據(jù)索引找到了指定的記錄所在行后,還需要根據(jù)rowid再次到數(shù)據(jù)塊里取數(shù)據(jù)的操作。比如這樣的執(zhí)行計(jì)劃,先索引掃描,再通過rowid去取索引中未能提供的數(shù)據(jù),即為回表?!盎乇怼币话憔褪侵笀?zhí)行計(jì)劃里顯示的“TABLE ACCESS BY INDEX ROWID”。再例如,雖然只查詢索引里的列,但是需要回表過濾掉其他行。
怎么避免回表?
將需要的字段放在索引中去。查詢的時候就能避免回表。但是不要刻意去避免回表,那樣代價太了。也不是將所有的字段都放在所有中。
回表和MySQL的索引實(shí)現(xiàn)有關(guān)系,有興趣的朋友可以進(jìn)一步了解B+樹相關(guān)原理,參照下面這篇文章“從B樹、B+樹、B*樹談到R 樹”。
不同于oracle的rownum,mysql不太直接提供這樣的字段,但是可以用變量的方法添加偽自增序列,語法格式為SELECT @rownum:=@rownum+1 AS rownum, table_name.* FROM (SELECT @rownum:=0) r, table_name ;
看了以上了解MySQL執(zhí)行計(jì)劃結(jié)果介紹,希望能給大家在實(shí)際運(yùn)用中帶來一定的幫助。本文由于篇幅有限,難免會有不足和需要補(bǔ)充的地方,大家可以繼續(xù)關(guān)注億速云行業(yè)資訊板塊,會定期給大家更新行業(yè)新聞和知識,如有需要更加專業(yè)的解答,可在官網(wǎng)聯(lián)系我們的24小時售前售后,隨時幫您解答問題的。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。