1. 程式人生 > 其它 >[MySQL系列] 使用STRAIGHT_JOIN 優化inner join查詢排序索引問題

[MySQL系列] 使用STRAIGHT_JOIN 優化inner join查詢排序索引問題

專案裡有條sql語句使用inner join 語句

但是在增加了order by 左表.欄位 desc 後效率非常慢

查詢explain 如下:

左表字段last_follow_time是有索引的,排序時但是並沒有走索引,出現了Using temporary; Using filesort

這是因為排序時沒有使用左表的欄位索引,我們可以強制使用左表作為主表,就可以使用索引了

STRAIGHT_JOIN 替換 inner join,就可以解決問題

總的來說STRAIGHT_JOIN只適用於內連線,因為left join、right join已經知道了哪個表作為驅動表,哪個表作為被驅動表,比如left join就是以左表為驅動表,right join反之。

而STRAIGHT_JOIN就是在內連線中使用,而強制使用左表來當驅動表,所以這個特性可以用於一些調優,強制改變mysql的優化器選擇的執行計劃。(也就是說STRAIGHT_JOIN實際上是INNER JOIN的強制指定左表作為驅動表,而不是讓mysql優化器去判斷和選擇)

開源作品

GO-FLY,一套可私有化部署的免費開源客服系統,安裝過程不超過五分鐘(超過你打我 !),基於Golang開發,二進位制檔案可直接使用無需搭開發環境,下載zip解壓即可,僅依賴MySQL資料庫,是一個開箱即用的網頁線上客服系統,致力於幫助廣大開發者/中小站長快速整合私有客服功能 github地址:
go-fly
官網地址:https://gofly.sopans.com

讚賞作者

微信交流