ORDER BY id 爲何效率不高

ORDER BY id 爲何效率不高

背景

系統代碼中有以下查詢SQL,DBA要求優化;

SELECT id,
user_id,
patient_id,
his_id,
bill_no,
log_model
FROM platfom_fee_log
WHERE fee_channel = 2
AND gmt_create >= '2018-12-24 01:05:00'
AND gmt_create <= '2018-12-25 07:58:00'
AND (id_no = '370281198211092363' OR guarder_id_no = '370281198211092363')
ORDER BY id DESC
LIMIT 0,10

DBA驗證的結論:

上述 sql 需要優化,現在 200s 返回,優化後 0.54s。order by id 改爲 order by gmt_create

思考點

爲什麼order by id不行,而 order by gmt_create 效果更好?

DBA給出原因爲:

order by id,mysql 的優化器會選擇主鍵索引,但是 where 條件裏又沒有主鍵條件,導致全表掃描。
order by gmt_create,結合 where 條件裏 gmt_create ,mysq 優化器會選擇 gmt_create 索引,掃描的記錄數少,效果更好。

知其然知其所以然

這篇博客中有進一步的解釋;

更多詳見Google

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