最近對sql優化,還有uri慢介面優化,遇到一些比較有意思的事情,這記錄一下
最近接手APP產品,被用戶吐槽蠻多的,主要是入庫和出庫的流程比較慢,查詢慢,
看了一下同事寫的代碼,果然,復雜條件的查詢寫不出來就導致初級程式員容易foreach里面寫dao,而且還是四層for回圈里面不斷呼叫dao取某一條件的資料,
這就導致一個介面要和資料庫做幾十萬此io互動,希望大家以此為戒,
這里給出優化思路,也可能是我現在思維局限,想不出來更好的思路,因為每過一段時間去看之前寫的代碼都感覺很呆,哈哈哈相信大家也會有一樣的想法,
1)減少和磁盤的io互動,
外鍵left join on關聯條件,涉及到去重在sql中完成 ,
2)適當在where欄位建立索引,盡量根據業務場景建立聯合索引,這里需要針對欄位做總結,最多的必填欄位建立聯合索引,用的最頻繁的欄位在聯合索引的最左邊,因為索引的維護也需要一定的開銷,(具體為什么在最左邊可以自行百度)
3)多選查詢應該也是一次拿到所有的資料在代碼層做資料篩選,有的查詢可以是2的n次方中情況,這里需要結合for進行判斷,
4) 可以結合阿里巴巴的druid資料庫連接池做簡單的慢uri和慢sql的監控,及時優化,
5)使用exists和not exists的時候注意小表在外,大表在內,可以一定程度上優化性能,
6)百萬以上的資料查詢依舊會很慢,這時候需要做其他處理,
7)針對慢uri,存在介面呼叫的情況,這里我給的方法是同步改異步,采用多執行緒的方式進行遠程api的呼叫,我們業務場景主要是資料推送,并不關心實時回傳結果,等遠程api回傳結果以后再對記錄做update.畢竟一次完整的http在并發比較大的情況下就會顯得很漫長,所以還必須要把同步代碼改為異步的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/255955.html
標籤:其他
上一篇:[C++] map集合的使用
下一篇:SAP-ABAP-運行速度優化
