核心軍規
- 儘量不在數據庫做運算
- 控制單表數據量 純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
閱讀更多 編碼之道 的文章