MySQL資料庫開發的36條鐵律
知識
06-25
來自一線的實戰經驗,主要針對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
※遞歸函數及匿名函數配合內置函數的使用
※一個製作Web圖案的組件css-doodle
TAG:程序員小新人學習 |