---恢復內容開始---
摘要:
在實際項目開發中,由於我們不知道實際查詢的時候數據庫發生什么了什么事情,數據庫軟件是如何掃描表、怎么使用索引的,因此,我們能感知到的就只有sql語句運行的時間,在數據規模不大時,查詢是瞬間的,因為在寫sql語句的時候就很少考慮到性能問題。但是當數據規模大時,如千萬,億的時候,我們運行同樣的sql語句時就會發現遲遲沒有結果,這個時候才知道數據規模已經限制了我們查詢的速度。所以,查詢優化和索引也就顯得很重要了。
問題:
當我們在查詢前能否預先估計查詢究竟要涉及多少行,使用那些索引、運行時間等,答案是可以的,MySQL提供相應的功能和語法來實現該功能。Server會比較所有可能方法所耗費的資源. 最終SQL語句被物理性執行的方法被稱做執行計划(數據庫服務器在執行sql語句之前會制定幾套執行計划!看那個機會消耗的系統資源少,就是用那套計划!)
分析:
MySQL提供了explain語法用來進行查詢分析,在SQL語句前加一個"explain"即可。比如我們要分析如下SQL語句:

運行上面SQL語句會看到,下面的表頭信息:

explain列的解釋
table 顯示這一行的數據是關於那張表的
type 顯示連接使用的何種類型,從最好到最差的連接類型是const、eq_reg、range、indexhe和ALL
說明:不同連接類型的解釋(按照效率高低的順序排序)
system:表示只有一行,system表。這是const連接類型的特殊情況。
const:表中的一個記錄的最大值能夠匹配這個查詢(索引可以是主鍵或唯一索引)。因為只有一行,這個值實際就是常數,因為
