必看的MySQL資料庫使用規範

2021-09-28 15:50:29 字數 4225 閱讀 6419

關於mysql資料庫規範,相信大家多少看過一些文件。本篇文章給大家詳細分類總結了資料庫相關規範,從庫表命名設計規範講起,到索引設計規範,後面又給出sql編寫方面的建議。相信這些規範適用於大多數公司,也希望大家都能按照規範來使用我們的資料庫,這樣我們的資料庫才能發揮出更高的效能。

【強制】庫的名稱必須控制在32個字元以內,英文一律小寫。

【強制】庫的名稱格式:業務系統名稱_子系統名。

【強制】庫名只能使用英文本母,數字,下劃線,並以英文本母開頭。

【強制】建立資料庫時必須顯式指定字符集,並且字符集只能是utf8或者utf8mb4。建立資料庫sql舉例:create database    db1 default character set utf8;

【建議】臨時庫、表名以tmp_為字首,並以日期為字尾,備份庫、表以bak_為字首,並以日期為字尾。

【強制】表和列的名稱必須控制在32個字元以內,表名只能使用字母、數字和下劃線,一律小寫。

【強制】表名要求模組名強相關,同一模組使用的表名盡量使用統一字首。

【強制】建立表時必須顯式指定字符集為utf8或utf8mb4。

【強制】列名盡量不用關鍵字(如type,order等)。

【強制】建立表時必須顯式指定表儲存引擎型別,如無特殊需求,一律為innodb。

【強制】建表必須有comment。

【強制】對於超過100w行的大表進行alter table,必須經過dba審核,並在業務低峰期執行,多個alter需整合在一起。

因為alter table會產生表鎖,期間阻塞對於該錶的所有寫入,對於業務可能會產生極大影響。

【建議】建表時關於主鍵:表必須有主鍵

(1)強制要求主鍵為id,型別為int或bigint,且為auto_increment 建議使用unsigned無符號型。

(2)標識表裡每一行主體的字段不要設為主鍵,建議設為其他欄位如user_id,order_id等,並建立unique key索引。

因為如果設為主鍵且主鍵值為隨機插入,則會導致innodb內部page**和大量隨機i/o,效能下降。

【建議】核心表(如使用者表)必須有行資料的建立時間欄位create_time和最後更新時間欄位update_time,便於查問題。

【建議】表中所有字段盡量都是not null屬性,業務可以根據需要定義default值。

因為使用null值會存在每一行都會占用額外儲存空間、資料遷移容易出錯、聚合函式計算結果偏差等問題。

【建議】中間表用於保留中間結果集,名稱必須以tmp_開頭。備份表用於備份或抓取源表快照,名稱必須以bak_開頭。中    間表和備份表定期清理。

【示範】乙個較為規範的建表語句:

create table user_info (

`id` int unsigned not null auto_increment comment '自增主鍵',

`user_id` bigint(11) not null comment '使用者id',

`username` varchar(45) not null comment '真實姓名',

`email` varchar(30) not null comment '使用者郵箱',

`nickname` varchar(45) not null comment '暱稱',

`birthday` date not null comment '生日',

`***` tinyint(4) default '0' comment '性別',

`short_introduce` varchar(150) default null comment '一句話介紹自己,最多50個漢字',

`user_resume` varchar(300) not null comment '使用者提交的簡歷存放位址',

`user_register_ip` int not null comment '使用者註冊時的源ip',

`create_time` timestamp not null default current_timestamp comment '建立時間',

`update_time` timestamp not null default current_timestamp on update current_timestamp comment '修改時間',

`user_review_status` tinyint not null comment '使用者資料審核狀態,1為通過,2為審核中,3為未通過,4為還未提交審核',

primary key (`id`),

unique key `uniq_user_id` (`user_id`),

key `idx_username`(`username`),

key `idx_create_time_status`(`create_time`,`user_review_status`)

) engine=innodb default charset=utf8 comment='**使用者基本資訊'

【強制】innodb表必須主鍵為id int/bigint auto_increment,且主鍵值禁止被更新。

【強制】innodb和myisam儲存引擎表,索引型別必須為btree。

【建議】主鍵的名稱以pk_開頭,唯一鍵以uniq_uk_開頭,普通索引以idx_開頭,一律使用小寫格式,以字段的名稱    或縮寫作為字尾。

【建議】單個表上的索引個數不能超過8個。

【建議】在建立索引時,多考慮建立聯合索引,並把區分度最高的字段放在最前面。如列userid的區分度可由select                count(distinct userid)計算出來。

【建議】在多表join的sql裡,保證被驅動表的連線列上有索引,這樣join執行效率最高。

【建議】建表或加索引時,保證表裡互相不存在冗餘索引。

對於mysql來說,如果表裡已經存在key(a,b),則key(a)為冗餘索引,需要刪除。

【強制】程式端select語句必須指定具體欄位名稱,禁止寫成 *。

【強制】程式端insert語句指定具體欄位名稱,不要寫成insert into t1 values(…)。

【強制】除靜態表或小表(100行以內),dml語句必須有where條件,且使用索引查詢。

【強制】where條件裡等號左右字段型別必須一致,否則無法利用索引。

【強制】where 子句中禁止只使用全模糊的like條件進行查詢,必須有其他等值或範圍查詢條件,否則無法利用索引。

【強制】索引列不要使用函式或表示式,否則無法利用索引。如where length(name)='admin'或where user_id+2=10023。

【建議】insert into…values(xx),(xx),(xx).. 這裡xx的值不要超過5000個。

值過多雖然上線很很快,但會引起主從同步延遲。

【建議】select語句不要使用union,推薦使用union all,並且union子句個數限制在5個以內。

因為union all不需要去重,節省資料庫資源,提高效能。

【強制】禁止跨db的join語句。

【建議】不建議使用子查詢,建議將子查詢sql拆開結合程式多次查詢,或使用join來代替子查詢。

【建議】線上環境,多表join不要超過5個表。

【建議】在多表join中,盡量選取結果集較小的表作為驅動表,來join其他表。

【建議】批量運算元據時,需要控制事務處理間隔時間,進行必要的sleep。

【建議】事務裡包含sql不超過5個因為過長的事務會導致鎖資料較久,mysql內部快取、連線消耗過多等問題。

【建議】事務裡更新語句盡量基於主鍵或unique key,如update … where id=xx;

否則會產生間隙鎖,內部擴大鎖定範圍,導致系統效能下降,產生死鎖。

【建議】減少使用order by,和業務溝通能不排序就不排序,或將排序放到程式端去做。order by、group by、distinct這些    語句較為耗費cpu,資料庫的cpu資源是極其寶貴的。

【建議】order by、group by、distinct這些sql盡量利用索引直接檢索出排序好的資料。如where a=1 order by b可以利用      key(a,b)。

【建議】包含了order by、group by、distinct這些查詢的語句,where條件過濾出來的結果集請保持在1000行以內,否則        sql會很慢。

gorm 強制使用索引 必看的資料庫使用規範

關於mysql資料庫規範,相信大家多少看過一些文件。本篇文章給大家詳細分類總結了資料庫相關規範,從庫表命名設計規範講起,到索引設計規範,後面又給出sql編寫方面的建議。相信這些規範適用於大多數公司,也希望大家都能按照規範來使用我們的資料庫,這樣我們的資料庫才能發揮出更高的效能。關於庫 強制 庫的名稱...

資料庫(MySQL)規範

1 所有環境的mysql版本使用5.6社群版,64位版本 2 使用innodb儲存引擎 3 資料庫字符集預設為utf8,字符集預設校驗規則為utf8 general ci 4 所有表 欄位都需要新增注釋 5 單錶資料量控制在2000w以內 6 隔離線上和線下,禁止線下直接連線線上庫,禁止在已上線庫上...

mysql資料庫操作規範 資料庫操作規範

1.涉及到寫入資料庫的操作,請務必使用 nohup 的方式 或者使用 操作終端pc機 客戶機房windows主機 資料庫伺服器主機 的連線模式 或者在資料庫伺服器上開乙個vnc。這裡的寫入資料庫的操作,1.涉及到寫入資料庫的操作,請務必使用 nohup 的方式 或者使用 操作終端pc機 客戶機房wi...