來自一線的實戰經驗,主要針對DBA和後端開發人員,總是在災難發生後,才想起容災的重要性;總是在吃過虧後,才記得曾經有人提醒過。文末是詳細的視頻講解和PD下載
核心軍規
- 儘量不在數據庫做運算
- 控制單表數據量 純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
閱讀更多 程序員小新人學習 的文章