MySQL開發規範

2021-08-29 16:00:23 字數 3249 閱讀 2330

1、庫名、表名、欄位名必須使用小寫字母並採用下劃線分割;

2、庫名、表名、欄位名支援最多32個字元,統一規範、易於辨識以及減少傳輸量不要超過32;

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

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

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

1、禁止使用分割槽表

mysql的分割槽表實際效能不是很好,且管理維護成本較高

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

3、採用合理的分庫分表策略,推薦使用hash進行分表,表名字尾使用十進位制數,下標從0開始

首次分表盡量多的分,避免二次分表,二次分表的難度和成本較高

4、按日期時間分表需符合yyyy[mm][dd][hh]格式

5、單表字段數控制在20個以內

6、一條完整的建表語句中應包含必要的字段、主鍵、合理的索引(綜合**中所有的條件語句建立合理的索引)

索引是一把雙刃劍,它可以提高查詢效率但也會降低插入和更新的速度並占用磁碟空間

1、單張表中索參數量不超過5個;

2、單個索引中的字段數不超過5個;

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

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

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

5、避免冗餘或重複索引

合理建立聯合索引(避免冗餘),index(a,b,c)相當於index(a)、index(a,b)、index(a,b,c);

6、索引不是越多越好,按實際需要進行建立

每個額外的索引都要占用額外的磁碟空間,並降低寫操作的效能

7、不在索引列進行數**算和函式運算;

8、盡量不要使用外來鍵

外來鍵用來保護參照完整性,可在業務端實現,對父表和子表的操作會相互影響,降低可用性;

9、不使用%前導的查詢,如like「%***」,無法使用索引;

10、不使用反向查詢,如not in / not like

無法使用索引,導致全表掃瞄

全表掃瞄導致buffer pool利用降低

1、盡可能不要使用text、blob型別

刪除這種值會在資料表中留下很大的"空洞",可以考慮把blob或text列分離到單獨的表中

2、用decimal代替float和double儲存精確浮點數

浮點數相對於定點數的優點是在長度一定的情況下,浮點數能夠表示更大的資料範圍;浮點數的缺點是會引起精度問題

3、將字元轉化為數字

4、使用tinyint來代替enum型別

5、字段長度盡量按實際需要進行分配,不要隨意分配乙個很大的容量

varchar(n),n表示的是字元數不是位元組數,比如varchar(255),可以最大可儲存255個漢字,需要根據實際的寬度來選擇n;

varchar(n),n盡可能小,因為mysql乙個表中所有的varchar欄位最大長度是65535個位元組,進行排序和建立臨時表一類的記憶體操作時,會使用n的長度申請記憶體;

6、如果可能的話所有欄位均定義為not null

7、使用unsigned儲存非負整數

同樣的位元組數,儲存的數值範圍更大。如tinyint有符號為-128-127,無符號為0-255

8、使用timestamp儲存時間. 因為timestamp使用4位元組,datetime使用8個位元組,同時timestamp具有自動賦值以及自動更新的特性.

9、使用int unsigned儲存ipv4

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

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

1、使用預編譯語句prepared statement

只傳引數,比傳遞sql語句更高效,一次解析,多次使用,降低sql注入概率

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

3、避免隱式轉換

會導致索引失效,如select userid from table where userid=』 1234』

4、充分利用字首索引

必須是最左字首,不可能同時用到兩個範圍條件

5、避免使用儲存過程、觸發器、events等

讓資料庫做最擅長的事,降低業務耦合度,為sacle out、shading留點餘地,避開bug

6、避免使用大表的join

mysql最擅長的是單錶的主鍵/二級索引查詢

join消耗較多的記憶體,產生臨時表

7、避免在資料庫中進行數**算

容易將業務邏輯和db耦合在一起

mysql不擅長數**算和邏輯判斷

無法使用索引

8、拒絕大sql,拆分成小sql

充分利用query cache

充分利用多核cup

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參與;

11、對特別重要的庫表,提前與dba溝通確定維護和備份優先順序;

12、不在業務高峰期批量更新、查詢資料庫;

13、 提交線上建表需求,必須詳細註明所有相關sql。

mysql 的開發規範 MySQL開發規範

一 基礎規範 1 使用innodb儲存引擎 2 資料庫字符集使用utf8,校對字符集使用utf8 general ci 3 所有表 欄位都盡量新增注釋 4 庫名 表名 欄位名使用小寫字母,禁止超過32個字元,須見名知意 5 非唯一索引以 idx 欄位1 欄位2 命名,唯一索引必須以 uniq 欄位1...

MySQL開發規範

1 單張表中索參數量不超過5個 建議3個左右 如果超時,一般情況下表能夠進行二次拆分。2 單個索引中的字段數不超過5個 建議3個以內 3 對字串使 用字首索引。4 建議優先考慮字首索引,必要時可新增偽列並建立索引。1 表必須有主鍵。2 不使用更新頻繁的列作為主鍵。3 盡量不選擇字串列作為主鍵。4 不...

MySQL開發規範

本文件是為幫助研發與運維人員按照規範使用mysql資料庫,提公升研發寫sql的水平。致力於提供乙個安全,穩定,高效能的資料庫環境。命名規範 1 庫名 表名 欄位名必須使用小寫字母,分割。2 庫名 表名 欄位名不超過12個字元。3 庫名 表名 欄位名禁止使用mysql保留字,見附件。4 庫名 表名 欄...