mysql查詢序列 MySQL執行計畫的那些淺知識

2021-10-18 08:14:41 字數 1715 閱讀 2216

檢視執行計畫

select 、update、insert into、 delete等語句均被支援

id列id列值越大執行優先順序越高,id相同則從上往下執行,id為null最後執行

* 關聯查詢時,記錄數取決於關聯的表數,但id值相同

select_type

列 這個就比較多了,貼一張官方文件中的圖

(官方文件:

個人感覺大致知道什麼意思就可以了?

table

列 毋庸置疑,這個就是我們正在訪問的表的意思了

* 當包含子查詢和union時,會略有不同

如 ,表示當前查詢依賴 id=n 的查詢;

,1和2表示參與 union 的 select 行id

possible_keys

和 key

列 possible_keys列顯示查詢可能使用哪些索引來查詢

key列顯示mysql實際採用哪個索引來優化對該錶的訪問

key_len

列 顯示了mysql在索引裡使用的位元組數

ref列 這一列顯示了在key列記錄的索引中,表查詢值所用到的列或常量。常見的有:const(常量),欄位名...

rows

列 這一列是mysql估計要讀取並檢測的行數,注意這個不是結果集裡的行數

filtered

列 按表條件過濾的行百分比

type

列 表示關聯型別或訪問型別

從最優到最差分別為:system > const > eq_ref > ref > range > index > all

一般來說,得保證查詢達到range級別,最好達到ref

null

mysql能夠在優化階段分解查詢語句,在執行階段用不著再訪問表或索引

const

表中最多有乙個匹配行,如where條件為表id時

eq_ref

表關聯查詢且用到索引時會出現

ref假如對a表中的key1欄位建立普通索引,當通過key1='a'的where條件查詢時,可能會出現ref

range

通常出現在 in(), between ,> ,= 等操作中

index

雖然走了索引,但是幾乎走了全部索引時出現該值,換言之,我們的索引建立的沒有太大意義,區分度不是很好

all全表掃瞄

extra

列 用來說明一些額外資訊

using index 

查詢的列被索引覆蓋,是效能高的表現  

using where 

全表掃瞄,where條件中沒有索引,需要我們建立索引  

null 

查詢的列未被索引覆蓋  

using index condition 

與using where類似,查詢的列不完全被索引覆蓋 

using join buffer (block nested loop) 在連線查詢執行過程中,mysql分配一塊名叫join buffer的記憶體塊來加快查詢速度

(此圖修改自網路)

mysql查詢計畫語句 mysql語句及執行計畫

mysql uroot p mysql h10.0.0.100 uuser password show databases insert into user select id 3333504 user name password birthday mobile email province cit...

MySql 查詢 生產序列號

mysql 如何實現 oracle 的 rownum mysql select from frutas nombre color fresa rojo platano amarillo manzana verde uva verde pera verde mandarina naranja melo...

mysql序列 mysql建立序列

提到mysql,我順便講講序列。用過oracle的人都知道,orale沒有類似mysql的auto increment這樣的自增長字段,實現插入一條記錄,自動增加1.oracle是通過sequence 序列 來完成的。這樣看起來,似乎mysql的自增長要比oracle序列的實現更好更方便。那我為什麼...