摘錄自:
一、核心軍規
1、盡量不在資料庫做運算
2、控制單錶資料量
3、保持表身段苗條
4、平衡正規化與冗餘
5、拒絕3b(big sql && big transaction && big batch)
二、欄位類軍規
6、用好數值字段型別
7、將字元轉化為數字
數字型vs字串型索引
舉例:用無符號int儲存ip,而非char(15)
8、優先使用enum或set
enum占用1位元組,轉為數值運算
set視節點定,最多占用8位元組
比較時需要加『 單引號(即使是數值)
9、避免使用null欄位
很難進行查詢優化
null列加索引,需要額外空間
含null復合索引無效
舉例:
a
char(32) default null
b
int(10) not null
c
int(10) not null default 0
10、少用並拆分text/blob
text型別處理效能遠低於varchar
強制生成硬碟臨時表
浪費更多空間
varchar(65535)==>64k(注意utf-8)
盡量不用text/blob資料型別
若必須使用則拆分到單獨的表
11、不在資料庫裡存
三、索引類軍規
12、謹慎合理新增索引
能不加的索引盡量不加
綜合評估資料密度和資料分布
最好不超過字段數20%
結合核心sql優先考慮覆蓋索引
13、字元字段必須建字首索引
pinyin
varchar(100) default null comment 『小區拼音』, keyidx_pinyin
(pinyin
(8)),
) engine=innodb
14、不在索引列做運算
不在索引列進行數**算或函式運算
無法使用索引
導致全表掃瞄
15、自增列或全域性id做innodb主鍵
16、盡量不用外來鍵
四、sql類軍規
17、sql語句盡可能簡單
拒絕大sql,拆解成多條簡單sql
18、保持事務(連線)短小
19、盡可能避免使用sp/trig/func
20、盡量不用select *
21、改寫or為in()
同一字段,將or改寫為in() • or效率:o(n)
in效率:o(log n)
當n很大時,or會慢很多
注意控制in的個數,建議n小於200
21、改寫or為union
22、避免負向查詢和% 字首模糊查詢
負向查詢:not、!=、<>、!<、!>、not exists、not in、 not like等
%字首查:b+ tree,使用不了索引,導致全表掃瞄
23、減少count(*)
結論:
count(*)=count(1)
count(0)=count(1)
count(1)=count(100)
count(*)!=count(col)
24、limit高效分頁
推薦:select * from table where id>=123 limit 11
25、用union all而非union
若無需對結果進行去重,則用union all
26、分解聯接保證高併發
27、group by去除排序
無需排序:order by null
特定排序:group by desc/asc
28、同資料型別的列值比較
原則:數字對數字,字元對字元
29、load data導資料
30、打散大批量更新
31、know every sql
五、約定類軍規
32、隔離線上線下
33、禁止未經dba確認的子查詢
34、永遠不在程式端顯式加鎖
35、統一字符集為utf-8
統一字符集:utf8
校對規則:utf8_general_ci
亂碼:set names utf8
36、統一命名規範
庫表等名稱統一用小寫
索引命名預設為「idx_欄位名」
庫名用縮寫,盡量在2~7個字母
注意避免用保留字命名
MYSQL資料庫開發規範
自己總結的mysql開發規範,夠用就行了。1 表 1.1 表必須要有主鍵,主鍵使用自動遞增,型別為int。1.2 表名使用有意義的英文單詞,可用下劃線分割。如需使用縮寫時,不可使用意義不明的縮寫。1.3 需要多表join的字段,資料型別保持絕對一致。1.4 字段命名時需要加上表名,確保所有表中的字段...
Mysql 資料庫開發規範
一 基礎規範 1 必須使用innodb儲存引擎 解讀 支援事務 行級鎖 併發效能更好 cpu及記憶體快取頁優化使得資源利用率更高 2 必須使用utf8字符集 解讀 萬國碼,無需轉碼,無亂碼風險,節省空間 3 資料表 資料字段必須加入中文注釋 解讀 n年後誰知道這個r1,r2,r3欄位是幹嘛的 4 禁...
MySQL 資料庫開發規範
一 表 單個表的字段數控制在 20個以下,最好不超過50個 單個表不超過20個char 或varchar 字段 單錶不超過50個純int欄位 拒絕大sql,大事務,批量操作 二 字段型別定義 字段型別選取原則 1 選取合適範圍的資料型別 2 只取正值的數值型別,新增 unsigned屬性 3 固定長...