1.命名java
數據庫命名以環境結尾(_dev);數據庫
表命名:模塊字頭_表名,好比平臺模塊用戶表:p_user,函數
字段命名:表內字段採用下劃線方式,下劃線方式支持數據庫對大小寫不敏感數據庫;命名避免java中的關鍵字和數據庫中關鍵字;性能
數據庫名,表名,字段名所有用英文小寫;編碼
索引命名以(IDX_)開頭;所有大寫;設計
外鍵以(FK_)開頭,所有大寫;排序
2.字段類型建議:索引
表時間用timestamp,若是是生日類日期用:datetime;utf-8
主鍵儘可能用char(32),會比varchar節省不少性能,varchar是可變長度,每次須要計算長度再存儲;ci
是否標識統一用(_flag),好比是否手機已註冊:mobile_flag(Integer),全部1表明是,0表明否
狀態標識統一用(_status),好比用戶狀態:user_status(Integer),1,2,4,6
金錢統一用service_price(decimal(20,2)),保留兩位小數,以元爲價格單元
每一個表基礎字段:del_flag(Integer)、create_time(timestamp)、update_time(timestamp),create_by(char(32)),update_by(char(32))
3.注意事項
數據庫編碼不要用utf-8,要用utf8mb4,否則有些特殊編碼會存儲不進去;
可能用於查詢條件的字段,在設計中儘可能避免NULL,NULL也一樣會佔用存儲;
能用聯合主鍵作主鍵的,儘可能用聯合主鍵做爲主鍵;
列類型儘可能定義成數值類型,且長度儘量短,如主鍵和外鍵,類型字段等等
當一個表字段有兩個或以上text時,儘可能考慮創建輔表,輔表以主表主鍵共用;
SELECT子句,禁止使用*
count(1) 和count(*) 效率上沒有本質上的區別,但咱們仍推薦用count(1)
若是應用邏輯容許,建議用用EXISTS替代IN
4.索引創建
根據須要創建多列聯合索引
多表鏈接的字段上須要創建索引
where條件字段上須要創建索引
排序字段上須要創建索引
分組字段上須要創建索引
Where條件上不要使用運算函數,以避免索引失效