主要用explain
命令去檢視
語法 :explain select … from … [where ...]
例如:explain select * from city
結果如下:
idselect_type
table
type
possible_keys
keykey_len
refrows
extra
1******
city
all345
屬性分析
id:這是select的查詢序列號
select_type:select型別,可以有以下幾種:
******:簡單的select
primary:最外面的select
union:union中的第二個或後面的select語句
dependent union:union中的第二個或後面的select語句,取決於外面的查詢
union result:union的結果。
subquery:子查詢中的第乙個select
dependent subquery:子查詢中的第乙個select,取決於外面的查詢
derived:匯出表的select(from子句的子查詢)
table : 表示這一行資料關於哪張表
type: 顯示了連線使用了哪種類別,有無使用索引,是使用explain命令分析效能瓶頸的關鍵項之一。
結果值從好到壞依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all
一般來說,得保證查詢至少達到range級別,最好能達到ref,否則就可能會出現效能問題。
possible_keys:列指出mysql能使用哪個索引在該表中找到行
key:顯示mysql實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是null
key_len:顯示mysql決定使用的鍵長度。如果鍵是null,則長度為null。使用的索引的長度。在不損失精確性的情況下,長度越短越好
ref:顯示使用哪個列或常數與key一起從表中選擇行。
rows:顯示mysql認為它執行查詢時必須檢查的行數。
distinct
一旦mysql找到了與行相聯合匹配的行,就不再搜尋了
not exists
mysql 優化了left join,一旦它找到了匹配left join標準的行,
就不再搜尋了
range checked for
each
record(index map:#)
沒有找到理想的索引,因此對於從前面表中來的每一 個行組合,mysql檢查使用哪個索引,並用它來從表中返回行。這是使用索引的最慢的連線之一
using filesort
看 到這個的時候,查詢就需要優化了。mysql需要進行額外的步驟來發現如何對返回的行排序。它根據連線型別以及儲存排序鍵值和匹配條件的全部行的行指標來 排序全部行
using
index
列資料是從僅僅使用了索引中的資訊而沒有讀取實際的行動的表返回的,這發生在對錶 的全部的請求列都是同乙個索引的部分的時候
using temporary
看到這個的時候,查詢需要優化了。這 裡,mysql需要建立乙個臨時表來儲存結果,這通常發生在對不同的列集進行order
by上,而不是group
by上using
where
使用了where從句來限制哪些行將與下一張表匹配或者是返回給使用者。如果不想返回表中的全部行,並且連線型別all或index, 這就會發生,或者是查詢有問題
mysql 如何檢視sql語句執行時間和效率
檢視執行時間 1 show profiles 2 show variables 檢視profiling 是否是on狀態 3 如果是off,則 set profiling 1 4 執行自己的sql語句 5 show profiles 就可以查到sql語句的執行時間 檢視操作了多少行 在sql語句前面加...
mysql如何檢視SQL語句執行效率?
主要用explain命令去檢視 語法 explain select from where 例如 explain select from city 結果如下 idselect type table type possible keys keykey len refrows extra 1 city a...
sql語句or與union all的執行效率比較
看到一篇文章是講sql語句or與union all的執行效率比較的,以前沒怎麼注意這個問題,感覺文章寫的不錯,轉來一看。sql語句or與union all的執行效率比較 當sql語句有多個or語句時,可以考慮使用union或者union all代替來提高速度。使用or的sql語句往往無法進行優化,導...