有關慢uri優化,慢Sql優化

最近對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在併發比較大的情況下就會顯得很漫長,所以還必須要把同步代碼改爲異步的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章