檢視執行計畫
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序列的實現更好更方便。那我為什麼...