1> html
問題描述數據庫
某客戶集團反饋某模塊崩潰,致使系統異常,系統沒法登錄;app
關閉該模塊瀏覽模塊後,系統才恢復正常問題重複出現屢次。ide
處理過程性能
協助排查問題優化過程當中發現查詢該模塊的一個長SQL致使性能問題,其中引起問題的主要緣由在下圖中的部分SQL片斷:優化
以上SQL中workflowtye在流程表中存放的爲int類型,而子句中的content確爲char類型,兩個類型不一樣的字段進行關聯比較時,致使索引失效。spa
修改conten的字段類型爲int以後SQL性能恢復正常。設計
在表設計初期,應將須要進行關聯的字段類型設置爲同一類型。不然會帶來嚴重的性能問題,後期修改的難度將更大。3d
2> 日誌
問題描述
配合客戶上線壓測期間,發現某接口查詢SQL在數據量比較大時性能沒法知足客戶要求,需進行改造優化
處理過程
該SQL的查詢邏輯耗時主要在排序分頁上,SQL精簡以後的邏輯以下:
優化的思路以下:
相似這種分頁+排序的SQL,第一種書寫的邏輯,在使用createdate和createtime進行排序時,須要經過主鍵回表查詢帶出其餘附帶的字段信息,
雖然能夠利用到索引,可是這種邏輯並不是最高效的,尤爲再分頁越靠後的時候,隨着偏移量加大,須要拿到內存中的數據就更多,查詢耗時就更久。
而第二種SQL的書寫方法,requestid和createdate,createtime字段上均有索引,在進行排序和分頁時,只須要檢索索引便可完成(MySQL的覆蓋索引概念),
只獲取到分頁以後的requestid值再與外部表進行inner join,查詢速度會極大的提高,而且查詢效率不會由於分頁靠後而明顯降低。
http://m.qd8.com.cn/yiyao/xinxi21_3709995.html
3>
問題描述
客戶環境數據庫CPU出現告警信息,協助進行排查數據庫相關問題。
處理過程
經過慢日誌分析對數據庫的總體性能分析並進行了優化。
此處列舉咱們程序中經常使用的一個問題邏輯:
部分SQL片斷以下
焦做國醫胃腸醫院口碑怎麼樣:http://jz.lieju.com/zhuankeyiyuan/37324643.htm
代碼中較多的SQL發現開發人員習慣使用exists邏輯來過濾數據,可是在MySQL中,exists的性能並非最高的,即便在字段存在索引的狀況下,在結結果集比較大狀況下,
exists的檢索速度遠不如inner join的hash鏈接,並且過多的使用exists容易致使SQL的執行計劃異常,而inner join邏輯相對更加直接,簡化。
咱們推薦的優先邏輯:join > exists > in