1. 程式人生 > 其它 >MYSQL效能優化以及建議

MYSQL效能優化以及建議

1、業務程式碼組合邏輯後進行資料庫操作,如根據波次進行庫存分配,可以將波次裡面的訂單所有明細進行分組,然後匹配庫存。
2、將大欄位、不常用欄位放置到擴充套件表中,將經常使用(狀態、數量、編號)放到一張表中,預防經常查詢所有欄位帶來很多網路流量開銷。
3、儘量使用主鍵進行加鎖,防止間隙鎖帶來鎖衝突。
4、熱點資料更新放到事務最後,並制定更新順序(如庫存扣減、可以通過按照主鍵ID、貨品ID排序更新)。
5、減少大事務,可以將大事務拆分多個小的獨立事務(根據業務情況確定是否可以拆分),可以從兩個維度(1、節點狀態變更:如分配後自動生成揀貨任務,就可以拆分兩個事務,通過訊息佇列非同步處理另一個狀態。2、批量資料單個執行,如選擇多個波次執行一個操作,後臺可以逐個波次執行)。
6、合理調節資料庫最大連線數、innodb buffer大小。
7、合理使用伺服器記憶體快取,配合訊息佇列清理快取,來減少MYSQL的配置資料訪問。
8、表之間轉移/歸檔資料,少用insert into select where語句,防止select的where未走索引,加上其他事務更新表產生死鎖。
9、業務報表資料儘量通過job定時跑資料生成(業務時間加上索引,job跑最近的業務資料、或則結合RowVersion增量統計),避免直接使用複雜的SQL語句查詢業務表資料。
10、對於業務系統存在定時歸檔/關單的表,需要做好表重建工作,減少碎片以及儲存空間。
11、對於非常大的表,儘量不要查詢總條數,可以通過上一頁,下一頁的互動方式,後臺通過小技巧取一個總條數返回給前端,如當前頁的記錄數等於每頁需要展示的最大條數,則直接將總頁數+1否在,總頁數就是當前的頁。
12、對於只需要根據一個條件做等值查詢時,可以考慮通過分表減少每張表的資料量,如出庫單日誌表。
13、設計主從表(一對多)時,從表的外來鍵不要設定為可空,可能導致join走不了索引。
14、網上提到的不要使用IN操作,走不了索引的說法是錯誤的,具體走不走索引需要根據執行計劃分析(當in後面的資料在資料表中超過一定值就不會走)。
15、條件允許(如使用了可靠性很高的雲伺服器,不會意外斷電等)的情況下將雙一配置改為雙100配置,提升資料庫寫入效能。