mysql數據庫設計規範

數據庫設計規範

數據庫命名規範

規範 備註
數據庫對象名稱統一使用小寫字母並用下劃線分割 eg:mkt_tool
數據庫對象名稱禁止使用MySQL保留關鍵字 eg:password,from等
數據庫對象名稱作到見名思義,最長不超過32個字符 儘量的精簡、明確
臨時表以tmp爲前綴,日期爲後綴 eg:mp_user_20180921
備份表以bak爲前綴,日期爲後綴 eg:bak_user_20180921
全部存儲相同數據的列名和列類型必須一致 eg:a表的uid與b表的uid數據類型與列類型一致

數據庫基本設計規範

規範 備註
全部數據表使用innodb做爲存儲引擎 5.6之後做爲默認引擎,支持事務、行級鎖、更好的恢復性,高併發下性能更好
數據庫和表的字符集統一使用UTF8 主要是由於避免因爲字符集轉換產生的亂碼,其次utf8包含的字符更多,一個漢字佔3個字節
數據表和字段須要添加註釋 後續維護方便
單表數據量控制在500萬之內 單表存儲的數據量大小限制取決於存儲設置和文件系統
儘可能作到冷熱數據分離,減少表的寬度 避免查詢無用的數據
禁止在表中預留字段,禁止在數據庫中存儲圖片及文件等二進制數據 按需增長,避免表數據快速增加
禁止在線上作數據庫壓力測試
禁止開發環境直接鏈接生產環境數據庫 避免數據髒亂

數據庫索引規範

規範 備註
限制每張表索引的數量,單表索引不超過5個 索引不是越多越好,增長查詢效率的同時,會下降更新的效率
每一個innodb表必須有一個主鍵 不使用頻繁更新的鍵,不使用hash,字符串,MD5做爲主鍵,優先選取自動增加的列做爲主鍵
如何選擇聯合索引的順序 區分度最高的放在索引的最左側;字段長度最小的放在最左側;使用度最頻繁的列放在最左側
避免創建冗餘度和重複列索引增長了優化器生成查詢計劃的時間 對於冗餘索引並不會提升索引的性能,反而影響查詢計劃的生成
對於頻繁的查詢優先考慮使用覆蓋索引 避免Innodb進行索引的二次查找
儘可能避免使用外鍵 外鍵用於保證參照完整性,建議在業務端實現外鍵的約束,由於每次寫操做都須要檢測外鍵約束從而下降性能。

數據庫字段規範

規範 備註
優先選擇存儲須要的最小的數據類型 int類型相比字符串類型存儲空間更小,優先使用無符號的整型存儲
避免使用text、bolb、enum類型 使用text類型的時候注意只能使用前綴索引,不能有默認值
儘量的定義爲NOT NULL 索引NULL須要額外的空間來保存,進行比較和計算時須要對NULL進行特殊處理
避免使用字符串存儲日期型的數據,使用TIMESTAMP或DATETIME存儲 一、沒法使用日期函數進行比較和計算;二、用字符串存儲須要佔用更多的空間
使用decimal類型存儲金額類數據 一、decimal在計算時不丟失精度,佔用的空間由定義的寬度決定;二、可用於存儲比bigint更大的數據

數據庫SQL開發規範

規範 備註
使用預編譯進行數據庫操做 一、一次解析,屢次使用重複使用執行計劃;二、避免動態SQL帶來的SQL注入;
避免數據類型的隱式轉換 隱式轉換、會致使索引失效 eg:select * from test where id = '1'
充分利用已經存在的索引 一、避免使用雙%的查詢,使用後%進行替換;二、一個SQL只能利用到複合索引中的一列進行範圍查詢;三、使用left join或not exists來優化not in操做
禁止使用select * 查詢 一、消耗更多的CPU和io資源;二、沒法使用到覆蓋索引;
禁止使用不含字段列表的INSERT語句 明確指定insert的字段
避免使用子查詢,能夠把子查詢優化爲join操做 一、子查詢的結果集沒法使用到索引;二、子查詢產生臨時表操做,數據量大會影響效率;三、產生的臨時表消耗過多的CPU和IO
避免使用JOIN關聯太多的表 一、每join一個表會佔用一部份內存(join_buffer_size);二、會產生臨時表操做,影響查詢效率;三、MySQL容許關聯61個表,最多不超過5個
減小同數據庫交互的次數 一、數據庫適合批量處理,避免屢次請求數據庫;二、合併多個相同的操做到一塊兒,如一次修改多個字段
使用in代替on in的值不超過500個,in能夠有效的利用索引的
禁止使用order by rand()排序 order by rand()會把全部符合條件的數據裝到內存中排序獲取
where從句中禁止對列進行函數轉換和計算 對列進行函數轉換會致使沒法使用到索引 eg:where date(time) = '20180123'
明顯不會有重複值的狀況下使用UNION ALL UNION會把數據放到臨時表進行去重
拆分複雜的大SQL爲多個小SQL MySQL一個SQL只能使用一個CPU計算,SQL拆分後能夠經過並行執行提升效率

數據庫操做行爲規範

規範 備註
超過100萬行的數據批量寫操做,須要分批屢次操做 一、大批量的寫操做,容易形成主從延遲 二、產生大量的日誌 三、避免產生大事務操做
大表結構修改 直接修改大表容易進行鎖表,使用pt-online-schema-change修改表結構
禁止爲程序使用的帳戶授予root權限,遵循權限最小原則 程序使用的帳戶不許有drop權限,程序使用的帳戶只能鏈接到一個數據庫
相關文章
相關標籤/搜索