索引優化MAX()

看本文之前,建議先閱讀:http://blog.csdn.net/qq_33290787/article/details/51934999


普通的 MAX() SQL執行計劃:

這裏寫圖片描述

從執行計劃中可以看到:本次SQL查詢檢索了payment表(全表掃描,FTS),一共檢索了16086行數據。意味着從磁盤中讀取了16086行數據至mysql服務端內存中進行最大值判斷(有數據IO)。


爲payment_date建立索引以提高查詢效率:

這裏寫圖片描述

再次執行相同的MAX()操作並查看執行計劃:

這裏寫圖片描述

table:NULL,rows:NULL,即本次查詢沒有檢索數據庫中的表。並且Extra提示Select tables optimized away,說明該查詢已經是最優化的方法即可以直接在索引中進行查找並返回,根本不涉及數據表的IO


值得注意的是:

這裏寫圖片描述

雖然爲payment_date建立了索引,但是查找payment_date與查找MAX(payment_date)是不一樣的。查找payment_date要檢索表(使用索引檢索),共16086行(磁盤IO)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章