Mysql 開發規範
1、基礎規範
1) 使用InnoDB存儲引擎
2) 數據庫字符集使用UTF8,校對字符集使用utf8_general_ci
3) 全部表、字段都儘可能添加註釋
4) 庫名、表名、字段名使用小寫字母,禁止超過32個字符,須見名知意
5) 非惟一索引以 「idx_字段1_字段2」 命名,惟一索引必須以 「uniq_字段1_字段2」 命名
2、查詢規範
1) SQL語句儘量簡單,大的SQL想辦法拆分紅小的SQL實現
2) 不要使用SELECT * ,查詢具體要用到的字段
3) 禁止like作where條件(會全表掃描且不能用索引)
4) 除非必要,避免使用 != 等非等值操做符(會致使用不到索引)
5) Where條件裏不要對列使用函數(不會引用索引)
6) 能肯定返回結果只有一條時,使用limit 1(LIMIT分頁注意效率,LIMIT越大,效率越低)
7) 少用子查詢,改用JOIN(子查詢要在內存裏建臨時表)
8) 多表JOIN的字段,區分度最大的字段放在前面
9) IN條件裏的數據數量要儘可能少,超過200個用EXIST代替IN
10) Where字句中同一個表的不一樣字段組合建議小於5組(不然考慮分表)
11) 禁止單條語句同時更新多個表
12) 事務要儘可能簡單,整個事務的時間長度不要太長
3、表設計規範
1) 用DECIMAL代替FLOAT和DOUBLE存儲精確浮點數(精確數據)
2) 使用TINYINT代替ENUM類型(便於遷移時兼容)
3) 儘量不使用TEXT、BLOB類型(該數據類型不能設置默認值、不便於排序、不便於創建索引)
4) 同一意義的字段設計定義必須相同(便於聯表查詢)
5) 全部字段均定義爲NOT NULL(避免使用NULL字段,NULL字段很難查詢優化,NULL字段的索引須要額外空間,NULL字段的複合索引無效)
6) 表必須有主鍵,不使用更新頻繁的列作主鍵、儘可能不使用字符串列作主鍵,儘可能使用非空的惟一自增鍵作主鍵
4、索引設計規範
1) 單表索引數量不超過10個
2) 單個字段不要超過兩個索引
3) 新建的惟一索引必須不能和主鍵重複
4) 避免冗餘和重複索引
5) 儘可能不要在頻繁更新的列上創建索引
6) 不在低基數列上創建索引,例如狀態、類型等
7) 不在索引列進行數學運算和函數運算(參與了運算的列不會引用索引)
8) 複合索引須符合最左前綴的特色創建索引(mysql使用複合索引時從左向右匹配)
9) 重要的SQL中where條件裏的字段必須被索引
10) Where條件裏的字段順序與索引順序無關,優化器會自動調整
11) 索引選擇性= Cardinality / Total Rows,即基數 ÷ 數據行數,值越接近1說明使用索引的過濾效果越好
12) 創建索引時,務必先explain,查看索引使用狀況
mysql