原作者:趕集網石展。
核心軍規
- 盡量不在資料庫做運算
- 控制單表資料量 純INT不超過10M條,含Char不超過5M條
- 保持表身段苗條
- 平衡範式和備援
- 拒絕大SQL,複雜事務,大批量任務
字段類軍規
- 用好數值字段,盡量台灣字段位數
- 把字元轉化為數字
- 優先使用Enum或Set
- 避免使用Null字段
- 少用并拆封Text/Blob
- 不在資料庫中存圖檔
索引類軍規
- 謹慎合理添加索引
- 字元字段必須建立字首索引?
- 不在索引列做運算
- 自增列或全局ID做InnoDB主鍵
- 盡量不用外鍵
SQL類軍規
- SQL盡可能簡單
- 保持事務連接配接短小
- 盡可能避免使用SP/Trigger/Function
- 盡量不用Select *
- 改寫Or為IN()
- 改寫Or為Union
- 避免負向查詢和%字首模糊查詢
- Count不要使用在可Null的字段上面
- 減少Count(*)
- Limit高效分頁,SELECT * FROM message WHERE id > 9527 (or sub select) limit 10
- 使用Union ALL 而不用Union
- 分解連結,保證高并發
- Group By 去除排序
- 同資料類型的列值比較
- Load Data導入資料,比Insert快20倍
- 打散大批量更新,盡量淩晨操作
約定類軍規
- 隔離線上線下
- 禁止未經DBA認證的子查詢
- 永遠不在程式段顯式加鎖
- 表字元集統一使用UTF8MB4