一次sql優化的過程--拆解sql

早上接到產品反饋,用戶反應系統中有一個常用列表刷新太慢。

找到列表刷新的log位置。

less xxx.log

通過"/"搜索定位到列表刷新的sql。
發現這個sql在只有幾千條數據的情況下執行了5s左右。確實有問題。

通過查看該sql的執行計劃,定位慢的原因。
explain select * from a left join b on a.id=b.uid where a.age=1;(這個只是一個例子,真實的sql當然比這個複雜)
id  select_type table  type  possible_keys  key   key_len    ref   rows    Extra
1    SIMPLE        a       ALL        null        null   null     null    4578    Using filesort

對於explain這裏我就不詳細說了,不瞭解的可以看看之前文章

https://blog.csdn.net/wobuaizhi/article/details/82350328

還有一些定位的方法

https://blog.csdn.net/wobuaizhi/article/details/78785571

今天這個問題時業務要求導致sql必須這樣寫。

想到的第一個就是把現有的影響性能的部分“移出來 ”,另起一個查詢。

拆解後,雖然需要查詢兩次,但是整體查詢時間快了很多。可以滿足用戶的需求。

 

有時候不能光把眼光放在sql上,結合業務優化可以事半功倍。

 

知識使我快樂

 

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