mysql開發規範最新版本 MYSQL 開發規範

2021-10-20 23:10:03 字數 2633 閱讀 8521

資料庫命名規範

所有資料庫物件表名必須小寫 (mybook_db)

命名要做到見名知意,不能使用mysql保留關鍵字

臨時表 tmp_ 開頭,備份表以 bak_ 開頭 都以時間戳結尾

所有儲存相同資料的列名和列型別必須一致

兩個表的 列名和字段型別相同,這種列一般作為關聯列來使用,如果字段型別不同,在進行關聯查詢時,會進行相應的轉換,影響查詢的效率。

資料庫基本設計規範

所有表使用 innodb 儲存引擎 (mysql5.5 以前使用 myisam 引擎)

所有表和字段都要有備註資訊 (在sql語句後面加上 comment),並使用utf-8字符集

要盡量控制單錶大小,並把冷熱資料分離

禁止使用預留字段(預留字段無法見名知意,也無法確認儲存的字段型別,修改預留欄位會對錶進行鎖定,成本遠高於增加字段)和在表中儲存大的二進位制資料

禁止從開發環境,測試環境直連生成環境資料庫

資料庫索引設計規範

面試:我們要在那些列上建立索引:

select, update, delete 語句的where 從句中的列

包含在 order by, group by, distinct 中的字段

多表join 的關聯列(不加索引效能較差)

如何選擇索引列的順序:

我們知道在聯合索引中,索引列是按照從左到右來使用的,所以在建立索引時按照以下順序建立

區分度最高的列(主鍵,唯一鍵)放在聯合索引的最左側

盡量把字段長度小的列放在聯合索引的最左側

如果上面兩條都類似的情況下,將使用最頻繁的列放在聯合索引的左側

覆蓋索引:包含了所有查詢字段(如select where從句中的列,orderby groupby中的列的索引)

索引規範:

限制每張表上的索參數量,建議單張表索引不超過5個(

innodb是按照主鍵索引來組織表的,所以每個表都要有主鍵(沒有主鍵則按照非空唯一索引)

不使用頻繁更新的列作為主鍵,不使用多列主鍵,不使用uuid,md5,hash,字串列作為主鍵。建議使用自增id值

避免建立冗餘和重複索引(mysql和其他資料庫不同, 主鍵就是乙個非空唯一索引) primary key(id), index(id), unique index(id) # id上的主鍵 id上的索引 id上的唯一索引,這樣就是建立了重複索引

index(a,b,c), index(a,b), index(a) # 對於a來說就是建立冗餘索引,三個索引都是可以使用

盡量避免使用外來鍵 (mysql會自動在外鍵上建立索引)。不建議使用外來鍵約束,但一定在表與表之間的關聯鍵上建立索引。外來鍵保證資料的參照完整性,但建議在業務端實現

對頻繁查詢優先考慮使用覆蓋索引, 避免innodb表進行索引的二次查詢,可以把隨機io變為順序io加快查詢效率。

資料庫字段設計規範

選擇符合儲存要求的最小的資料型別

避免使用blob 或是 text型別和enum 型別

每個字段盡可能的具有 not null屬性

使用datetime 或 timestamp 型別儲存時間

sql 開發規範

使用預編譯語句進行資料庫操作 (一次編譯,多次處理,提高效率。傳遞引數比傳遞sql語句更高效。防止sql 注入)

避免資料型別的隱式轉換(隱式轉換會導致索引失效) select name, phone from customer where id='123'

這裡引數是字串,而字段型別卻是 int 型別,會導致隱式轉換,從而使索引失效。

充分利用表上已經存在的索引(避免使用雙%查詢。 如 a like '%123%' 或者 a like '%123', 這兩種情況都無法使用索引)。乙個sql只能利用復合索引中的一列進行範圍查詢。使用 left join 和 not exists 來優化 not in 操作

禁止使用 select *,必須使用 select 查詢 (消耗更多的io,cpu等資,無法使用覆蓋索引,可減少表結構帶來的影響)

禁止使用不包含欄位的insert 語句,同select類似

禁止使用子查詢,可以把子查詢優化為 join(子查詢結果集無法使用索引,產生臨時表。消耗太多資源)

join 不要關聯太多表(建議不超過5個,會產生臨時表,影響查詢效率)

減少同資料庫的互動次數

禁止使用 order by rand() 進行隨機排序(推薦在程式中獲取隨機值,然後從資料庫中獲取)

會把表中所有符合條件的資料載入到記憶體進行排序,消耗大量的cpu和io以及記憶體資源

where 從句禁止對列進行函式轉換和計算(會導致無法使用索引) where date(createtime)='20170901' # 用下面的語句替換

where createtime >='20170901' and createtime

在明顯不會有重複值時使用 union all 而不是 union(union all 不會對結果集進行去重。而union 會把所有資料放到臨時中進行去重)

拆分複雜大sql 為多個小sql

資料庫操作規範

超過100w的批量寫操作,分批進行(大批量操作可能導致嚴重主從延遲,避免大事務操作)

對大表使用 pt-online-schema-change 修改表結構

mysql 最新版本 mysql最新版本是多少

mysql 8.0 正式版 8.0.11 已發布,官方表示 mysql 8 要比 mysql 5.7 快 2 倍,還帶來了大量的改進和更快的效能!注意 從 mysql 5.7 公升級到 mysql 8.0 僅支援通過使用 in place 方式進行公升級,並且不支援從 mysql 8.0 降級到 m...

cimoc 最新版 Cimoc最新版本

cimoc最新版本擁有超豐富的熱門漫畫資源,讓你在每乙個無聊的時間裡都可以自由閱讀好看的漫畫,每一本漫畫都擁有自己的標籤,讓使用者們可以通過這些標籤找到更多相似型別的漫畫,並且所有漫畫資源都可以讓你免費暢讀,看到好看的漫畫不要猶豫,直接點進去就能 cimoc最新版本 軟體特色 1.中漫 日漫 韓漫,...

Opera next最新版本

opera next採用了chromium開源專案成果,以下從幾個大的方面比較和chrome的異同 opera 15.0.1147.61 相當於chrome 28.0.1500.45 安裝後的檔案目錄結構和chrome類似 安裝後檔案大小與chrome也差不多 多程序架構也是chrome幾乎一樣 甚...