看本文之前,建議先閱讀: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)。