SQL效率問題定位:mysql
在進行SQL優化前,需定位哪些SQL效率低,這一過程有以下幾種方式、方法:sql
explain:性能
經過上述方法定位到效率低的SQL後,可經過explain分析SQL如何執行的。優化
字段 | 含義 |
id | select查詢的序列號,是一組數字,表示的是查詢中執行select子句或者是操做表的順序。 |
select_type | 表示 SELECT 的類型,常見的取值有 SIMPLE(簡單表,即不使用錶鏈接或者子查詢)、PRIMARY(主查詢,即外層的查詢)、UNION(UNION 中的第二個或者後面的查詢語句)、SUBQUERY(子查詢中的第一個SELECT)等 |
table | 輸出結果集的表 |
type | 表示表的鏈接類型,性能由好到差的鏈接類型爲( system ---> const-----> eq_ref ------> ref -------> ref_or_null---->index_merge ---> index_subquery -----> range ----->index ------> all ) |
possible_keys | 表示查詢時,可能使用的索引 |
key | 表示實際使用的索引 |
key_len | 索引字段的長度 |
rows | 掃描行的數量 |
extra | 執行狀況的說明和描述 |
MySQL默認使用存儲引擎InnonDB的索引結構是B+樹。而根據葉子節點的內存存儲不一樣,索引類型分爲主鍵索引(聚簇索引)和非主鍵索引(二級索引、輔助索引)。日誌
主鍵索引的葉子節點,存儲的是整行信息。非主鍵索引葉子節點存儲的是主鍵的值。blog