檢視sql計畫任務:使用explain
字段解釋:
一、id欄位:
一組資料,表示任務被執行的順序,序號越大的任務越先執行
二、select_type欄位:
1. ****** : 不包含任何子查詢或union等查詢
2. primary : 包含子查詢最外層查詢就顯示為 primary
3. subquery:在select或 where字句中包含的查詢
4. derived: from字句中包含的查詢
5. union:出現在union後的查詢語句中
6. union result:從union中獲取結果集
三、table欄位:
查詢的資料表,當從衍生表中查資料時會顯示 x 表示對應的執行計畫id。
四、partitions欄位:
表的分割槽字段,沒有分割槽的話則為null.
五、type欄位解釋:
1. system : const的特例,當表上只有一條元組匹配
2. const:where條件至多只有一條元組匹配
3. eq_ref:基於索引掃瞄時,外表一條元組,內錶只有唯一一條資料與外表對應
4. ref:用於單錶或聯表,外表一條元組,內錶可以有多條資料與外表對應
5. ref_or_null:類似ref,條件可以為null
6. range:範圍掃瞄:between,> ,
7. index_scan: 索引掃瞄,不需要訪問檔案
8. all:不使用索引,順序搜尋,直接訪問檔案
9. unique_subquery:在子查詢中,基於唯一索引進行掃瞄
10. index_subquery:在子查詢中,基於非唯一索引進行掃瞄
11. ft:全文檢索
speed:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all
六、possible_keys
這次查詢可能使用的索引,但是不一定是真正使用的索引.
七、key
查詢真正使用的索引,若沒有使用索引,顯示為null.
八、key_len
使用索引的長度,在使用聯合索引的時候可以根據這一列來推算使用了哪些最左字首索引.
計算方式:
* 所有字段如果沒有設定為not null,則需要加乙個位元組.
* 定長字段占用實際的位元組長度,比如:int占用4個位元組,datatime占用4個位元組.
* 變長字段占用多占用兩個位元組,比如varchar(20)將會占用20*4+2 = 82個位元組.
* 不同的字符集占用位元組不一樣,上面舉例是使用的utf8mb4字符集.
九、ref
表示上述表的連線匹配條件,即哪些列或常量被用於查詢索引列上的值
十、rows
返回估算的結果集數目,並不是乙個準確的值。
十一、extra
包含一些其他資訊,常見的有以下幾種:
* using index 表示相應的select操作中使用了覆蓋索引(covering index)
* using where 表示拿到記錄後進行「後過濾」(post-filter),如果查詢未能使用索引,using where的作用只是提醒我們mysql將用where子句來過濾結果集
* using temporary 表示mysql在這個查詢語句中使用了臨時表.
* using filesort 表示使用了檔案排序,即查詢中的排序無法通過索引來完成.
Mysql優化之優化工具profiling
程式設計師的成長之路 2016 11 23 22 42 mysql優化之優化工具profiling 前言mysql優化技術 mysql優化不是做乙個操作就可以的優化,它包含很多的細節,需要一點一點的優化,最後這個效能提公升會很高 引申假設有這樣的需求 現在很慢 專案裡面有很多的sql 眾多的sql裡...
Mysql優化之優化工具profiling
程式設計師的成長之路 2016 11 23 22 42 mysql優化之優化工具profiling 前言mysql優化技術 mysql優化不是做乙個操作就可以的優化,它包含很多的細節,需要一點一點的優化,最後這個效能提公升會很高 引申假設有這樣的需求 現在很慢 專案裡面有很多的sql 眾多的sql裡...
彙編優化工具
彙編優化工具 使彙編 更具可讀性,並提高彙編速度 優化15000行大約須要30秒 import rfile.h main rstr line del rstr s 符號替換 rstr sym replace rstr s rstr sym trans rstr s rstr seq replace ...