MySQL開發規範 pdf

2022-09-14 16:57:18 字數 2316 閱讀 5603

禁止項:

1、 禁止使用 select * 等查詢

當查詢所有字段(select *)會導致下列問題

1. 增加網路頻寬消耗

2. select *必然會導致回表查詢/返回資料,使覆蓋索引失效

3. 如果表結構有修改比如增加多列,返回多餘資料比較危險

2、 禁止庫名、表名、欄位名使用 mysql 保留字

3、 禁止使用分割槽表

mysql 分割槽表技術還是不是很成熟,而且對分割槽鍵有嚴格要求,分割槽表變大後對於表備份恢復都有很大困難,建議在業務端使用 sharding 技術。

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

如果需要儲存 mysql 密碼可以用 mysql 內建函式 password()對明文密碼進行 md5 進行加密。

5、sql 中禁止出現 now()、rand()、sysdate()、current_user()等不確定結果的 函式。

建議不確定的時間在程式層取出時間,語句級複製場景下,引起主從資料不一致; 不確定值的函式,產生 的 sql 語句無法利用。

6、 禁止使用 varbinary、blob 儲存、檔案等,使用 varchar(n),n 盡 量可能小

7、 禁止在列上進行運算

在列上運算將導致 mysql 索引失效而進行全表掃瞄。

規範項:

1、建表字符集使用 utf8 或者 utf8mb4

utf8 統一而且通用,不會出現轉碼出現亂碼風險。如果有表情符號需求的,可以使用 utf8mb4

2、表必須有主鍵,推薦使用 unsigned 自增列作為主鍵

表沒有主鍵,innodb 會預設設定隱藏的主鍵列;沒有主鍵的表在定位資料行時效率會非常低而且降低基於行複製的效率。在建表時務必定義乙個自增列做主鍵(與業務邏輯無關,而應用程式的資料如果有唯一的候選列可以做成唯一鍵),再次重申 innodb 儲存引擎中每張表一定要有乙個於業務無關的自增列做主鍵。

建議項:

1、建議慎重使用字首匹配的模糊查詢

字首匹配會導致直接全表掃瞄或全索引掃瞄,效能最差,無任何擴充套件,基本不可接受。

2、建議所有欄位均定義為 not null,設定 default 值。

定義為 not null 原因如下:

mysql 資料庫中每個為 null 的列都需要額外的 1 個位元組進行儲存,浪費空間資源。

b 樹索引時不會儲存 null 值,如果索引字段可以為 null,索引效率會下降。

建議用 0、特殊值或空串代替 null 值。

3、建議查詢中避免隱式轉換

mysql 中如果查詢欄位與表定義字段不同則會發生隱式轉換,從而無法用到索引導致查詢效率低下。

4、建議不要在 mysql 資料庫中存放業務邏輯

資料庫是有狀態的服務,變更複雜而且速度慢,如果把業務邏輯放到資料庫中,將會限制業務的快速發展。建議把業務邏輯提前,放到前端或中間邏輯層,而把資料庫作為儲存層,實現邏輯與儲存的分離。

5、建議不要使用子查詢

對於子查詢,mysql 會對子查詢結果返回給外部表,並對外部表進行全表掃瞄

6、建議將大字段、訪問頻率低的字段拆分到單獨的表中儲存,分離冷熱資料

當我們的表中存在類似於 text 或者是大的 varchar 型別的大字段的時候,如果我們大部分訪問這張表的時候都不需要這個字段,我們就該將其拆分到另外的獨立表中,以減少常用資料所占用的儲存空間。這樣做的乙個明顯好處就是每個資料塊中可以儲存的資料條數可以大大增加,既減少物理 io次數,也能大大提高記憶體中的快取命中率。

7、建議用 in() /union 替換 or,並注意 in 的個數(個數多少依照具體情況而定)

8、建議盡量不使用 mysql 儲存過程、觸發器、函式等(依照具體情況而定)

容易將業務邏輯和 db 耦合在一起,並且對於目前資料量儲存過程、觸發器、函式等沒有任何優勢(儲存過程、函式對大資料量的處理和複雜業務邏輯很有優勢),而且 mysql 儲存過程還有一定 bug。

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開發規範

1 庫名 表名 欄位名必須使用小寫字母並採用下劃線分割 2 庫名 表名 欄位名支援最多32個字元,統一規範 易於辨識以及減少傳輸量不要超過32 3 庫名 表名 欄位名禁止使用mysql保留關鍵字 4 臨時庫 臨時表名必須以tmp為字首並以日期為字尾 5 備份庫 備份表名必須以bak為字首並以日期為字...