MySQL資料庫設計規範

2021-09-25 06:57:53 字數 2575 閱讀 8175

1.庫名,表名,欄位名必須使用小寫字母,多個單詞中間用下劃線隔開;

2.庫名,表名,欄位名支援最多32個字元,易於辨識和減少傳輸量不要超過32;

3.庫名,表名,欄位名禁止使用mysql保留關鍵字;

4.臨時庫,臨時表名必須以tmp為字首並以日期為字尾;

5.備份庫,備份表名必須以bak為字首並以日期為字尾;

1.使用innodb儲存引擎,5.5版本以後預設的引擎,支援事務,行級鎖,具有更好的恢復性,高併發下效能更好,對多核,大記憶體,ssd等硬體支援更好;

2.表字符集使用utf-8,utf-8字符集,如果是漢字,占用3個位元組,asscii碼字元還是1個位元組;達到統一,才不會出現轉換是亂碼的問題;

3.建表是新增備註說明;

4.不在資料庫中儲存,檔案等大資料;

6.禁止從測試,開發環境直接連線線上資料庫;

1.盡量避免使用分割槽表,mysql的分割槽表實際的效能不是很好;

2.拆分大字段和訪問頻率低的字段,分離冷熱資料;

3.採用合理的分庫策略,推薦使用hash進行分表,表名字尾使用十進位制數,下標從零開始;首次分表盡量多的分,避免二次分表,二次分表成本高,複雜;

4.按日期時間分表要符合yyyy-mm-dd-hh 格式;

5.單表字段控制在20欄位以內;

6一條完整的建表語句中必須包含字段,主鍵,合理索引;

1.單錶中索參數量不超過5個;

2.單個索引中的字段數不超過5個。對字串使用字首索引長度不超過10個字元;如果有乙個char(200)列,如果在前10個字元內,多數值也是唯一的,那樣就不用對整個列進行索引。對前10個列進行索引能夠節省大量索引空間,查詢也更快;

3表必須有主鍵,不能使用uuid,md5,hash作為主鍵,盡量不選擇字串列作為主鍵;主鍵建議選擇自增id;

4建立復合索引時區分度較大的的字段放在,不在低區分度的字段上建立索引,例如:性別;

5避免冗餘或者重複索引;合理建立聯合索引(避免冗餘)

6.索引不是越多越好,按實際需求建立;每個額外的索引都要占用額外的磁碟空間,並降低寫操作效能。

7.不在索引列進行數**算和函式運算。

8.盡量不使用外來鍵。外來鍵用來保護參照完整性,可在業務端實現,對父表和字表操作會相互影響,降低可用性。

9.不使用%前導的查詢,這樣會導致索引無法使用。

10.不使用反向查詢,無法使用索引,導致全表掃瞄,降低查詢效率。

1.盡量不使用text,blob型別。

2.用decimal代替float和double儲存,否則會引起精度問題。

3.將字元轉化為數字

4.使用tinyint代替enum型別。

5.字段長度按實際需要分配,不要隨意分配乙個很大容量carchar。

6.如果可以,把所有的字段都定義為not null。

7.使用unsigned儲存非負整數。

8.使用timestamp儲存時間。

9.使用int unsigned儲存ipv4。

10.使用varbinary儲存大小寫敏感的變長字串。

11.禁止在資料庫中儲存明文密碼。

1.使用預編譯語句prepared statement。只傳引數,比傳sql語句更加高效,一次解析,多次使用,降低sql注入概率。

2.盡量避免相同語句由於書寫格式的不同,導致多次語法分析。

3.避免隱式轉換。會導致索引失效。

4.充分利用字首索引。必須是最左字首,不可能同時用到兩個範圍條件。

5.避免使用儲存過程,觸發器,events等,讓資料庫做最擅長的事,降低業務耦合度,為sacle out,shading留餘地,避開bug 。

6.避免使用大表join,mysql最擅長是單錶的主鍵,二級索引查詢,join消耗較多的記憶體,產生臨時表。

7.避免在資料庫中進行數**算,容易將業務邏輯和db耦合在一起,mysql不擅長數**算和邏輯判斷,無法使用索引。

8.拒絕大sql,查分成小sql,充分利用多核cpu。

9.使用in代替or,in的值不超過1000個。

10.禁止使用order by rand()。因為order by rand()會將資料從磁碟中讀取,進行排序,會消耗大量的io和cpu,可以在程式中獲取乙個rand值,然後通過在從資料庫中獲取對應的值。

11.使用 union all 而不是 union。

12.程式應有捕獲sql異常的處理機制。

13.禁止單條sql語句同時更新過個表。

14.不使用 select * from,消耗cpu和io。

1.批量匯入、匯出資料必須提前通知dba協助觀察。

2.批量更新資料,如update ,delete 操作,需要dba進行審查,並在執行過程中觀察服務負載等狀況。

3.禁止在主資料庫上執行後台管理和統計類功能查詢。

4.禁止有super許可權的應用程式賬號存在。

5.產品出現非資料庫導致的故障時應及時通知dba協助排查。

6.**活動或新上線功能必須體現通知dba進行流量評估。

7.資料庫資料丟失,及時聯絡dba恢復。

8.對單錶的多次alter操作必須合併為一次操作,相同型別的寫操作合併為一條語句。

9.不在mysql資料庫中放業務邏輯。

10.重大專案的資料庫方案選型和設計必須提前通知dba參與。

MySQL資料庫設計規範

禁止使用mysql保留關鍵字 資料庫物件的命名要見名識義,並且最好不要超過32個字元 臨時庫表必須以tmp為字首並以日期為字尾 備份庫表必須以bak為字首並以日期為字尾 所有儲存相同資料的列名和列型別必須一致 資料庫和表的字符集統一使用utf 8。所有表和字段都要新增注釋 create table ...

MySQL資料庫設計規範

規範背景與目的 mysql資料庫與 oracle sql server 等資料庫相比,有其核心上的優勢與劣勢。我們在使用mysql資料庫的時候需要遵循一定規範,揚長避短。本規範旨在幫助或指導rd qa op等技術人員做出適合線上業務的資料庫設計。在資料庫變更和處理流程 資料庫表設計 sql編寫等方面...

MYSQL資料庫設計規範

資料庫設計規範 命名規範 小寫字母開頭單詞之間使用下劃線分割 大小寫敏感 禁止使用保留關鍵字 不要超過32個字元 臨時表以tmp為字首 時間為字尾 備份表 bak為字首 時間為字尾 所有儲存相同資料型別的列名和列型別必須一致 所有表必須使用innodb儲存引擎 原因 預設儲存引擎 進行了很多優化 支...