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儲存引擎 原因 預設儲存引擎 進行了很多優化 支...