MySQL使用規(guī)范備注

一.基礎(chǔ)規(guī)范

1.必須使用InnoDB存儲引擎

支持事務(wù)抬探、行級鎖、并發(fā)性能更好、CPU及內(nèi)存緩存頁優(yōu)化使得資源利用率更高面氓。

2.新庫必須使用utf8mb4字符集

utf8mb4是utf8的超集羔味,emoji表情以及部分不常見漢字河咽,MySQL 8.0.1以上默認使用utf8mb4

3.數(shù)據(jù)表、數(shù)據(jù)字段必須加入中文注釋

4.禁止使用存儲過程赋元、視圖忘蟹、觸發(fā)器、Event

高并發(fā)大數(shù)據(jù)的互聯(lián)網(wǎng)業(yè)務(wù)搁凸,架構(gòu)設(shè)計思路是“解放數(shù)據(jù)庫CPU媚值,將計算轉(zhuǎn)移到服務(wù)層”,并發(fā)量大的情況下护糖,這些功能很可能將數(shù)據(jù)庫拖死褥芒,業(yè)務(wù)邏輯放到服務(wù)層具備更好的擴展性,能夠輕易實現(xiàn)“增機器就加性能”嫡良。數(shù)據(jù)庫擅長存儲與索引锰扶,CPU計算還是上移吧

5.禁止存儲大文件或者大照片

大文件和照片存儲在文件系統(tǒng),數(shù)據(jù)庫里存URI多好

6.禁止使用負向查詢NOT寝受、!=坷牛、<>、!<很澄、!>京闰、NOT IN锨亏、NOT LIKE等,會導(dǎo)致全表掃描

二.命名規(guī)范

1.只允許使用內(nèi)網(wǎng)域名忙干,而不是ip連接數(shù)據(jù)庫

2.線上環(huán)境器予、開發(fā)環(huán)境、測試環(huán)境數(shù)據(jù)庫內(nèi)網(wǎng)域名遵循命名規(guī)范

3.庫名捐迫、表名乾翔、字段名使用下劃線分割,小寫施戴,不要使用復(fù)數(shù)反浓,不超過32個字符,禁止拼音英文混用

4.表名以tb_開頭為實體表赞哗,以tr_開頭為關(guān)系表雷则,以th_開頭為歷史表等

5.唯一索引名以uk_字段名;普通索引名則以 idx_字段名

三.表設(shè)計規(guī)范

1.單實例mysql表數(shù)目必須小于500

2.單表列數(shù)目必須小于30

3.表必須有主鍵

  • 主鍵遞增肪笋,數(shù)據(jù)行寫入可以提高插入性能月劈,可以避免page分裂,減少表碎片提升空間和內(nèi)存的使用

  • 主鍵要選擇較短的數(shù)據(jù)類型藤乙, Innodb引擎普通索引都會保存主鍵的值猜揪,較短的數(shù)據(jù)類型可以有效的減少索引的磁盤空間,提高索引的緩存效率

  • 無主鍵的表刪除坛梁,在row模式的主從架構(gòu)而姐,會導(dǎo)致備庫夯住

4.禁止使用外鍵,如果有外鍵完整性約束划咐,需要應(yīng)用程序控制

外鍵會導(dǎo)致表與表之間耦合拴念,update與delete操作都會涉及相關(guān)聯(lián)的表,十分影響sql 的性能褐缠,甚至會造成死鎖政鼠。高并發(fā)情況下容易造成數(shù)據(jù)庫性能,大數(shù)據(jù)高并發(fā)業(yè)務(wù)場景數(shù)據(jù)庫使用以性能優(yōu)先

四.字段設(shè)計規(guī)范

1.必須把字段定義為NOT NULL并且提供默認值

  • null的列使索引/索引統(tǒng)計/值比較都更加復(fù)雜送丰,對MySQL來說更難優(yōu)化

  • null 這種類型MySQL內(nèi)部需要進行特殊處理缔俄,增加數(shù)據(jù)庫處理記錄的復(fù)雜性;同等條件下器躏,表中有較多空字段的時候俐载,數(shù)據(jù)庫的處理性能會降低很多

  • null值需要更多的存儲空,無論是表還是索引中每行中的null的列都需要額外的空間來標識

  • 對null 的處理時候登失,只能采用is null或is not null遏佣,而不能采用=、in揽浙、<状婶、<>意敛、!=、not in這些操作符號膛虫。

2.禁止使用TEXT草姻、BLOB類型

會浪費更多的磁盤和內(nèi)存空間,非必要的大量的大字段查詢會淘汰掉熱數(shù)據(jù)稍刀,導(dǎo)致內(nèi)存命中率急劇降低撩独,影響數(shù)據(jù)庫性能

3.禁止使用小數(shù)存儲國幣

使用“分”作為單位,這樣數(shù)據(jù)庫里就是整數(shù)了

4.必須使用varchar(32)存儲手機號

涉及到區(qū)號或者國家代號账月,可能出現(xiàn)±()

5.禁止使用ENUM综膀,可使用TINYINT代替

  • 增加新的ENUM值要做DDL操作

  • ENUM的內(nèi)部實際存儲就是整數(shù)

6.字段boolean使用unsigned tinyint( 1 表示是,0
表示否)局齿,非負數(shù)使用unsigned剧劝,多值使用枚舉,固定成長度使用char抓歼,不固定使用varchar 長度2的倍數(shù)(長度不要超過 5000,超過使用text讥此,并單獨新建一張表存儲)

7.實體表必備字段 id,create_time,modify_time

8.業(yè)務(wù)上具有唯一性的字段锭部,即使是組合字段暂论,也必須建成唯一索引。

五.索引設(shè)計規(guī)范

1.單表索引最好控制在3個以內(nèi)拌禾,不要超過5個

2.單索引字段數(shù)不允許超過3個

3.禁止在更新十分頻繁、區(qū)分度不高的屬性上建立索引

4.不要新增索引展哭,盡量使用組合索引(注意組合索引的最左原則湃窍,區(qū)分度最高的在最左邊)

5.不要在索引列上使用數(shù)學運算和函數(shù)運算

六.SQL使用規(guī)范

1.禁止使用SELECT *,只獲取必要的字段匪傍,需要顯示說明列屬性

  • 讀取不需要的列會增加CPU您市、IO、NET消耗
  • 不能有效的利用覆蓋索引
  • 使用SELECT *容易在增加或者刪除字段后出現(xiàn)程序BUG

2.禁止使用INSERT INTO tb_xxx VALUES(xxx)役衡,必須顯示指定插入的列屬性
容易在增加或者刪除字段后出現(xiàn)程序BUG

3.禁止使用屬性隱式轉(zhuǎn)換

SELECT uid FROM tb_user WHERE phone=13812345678 會導(dǎo)致全表掃描茵休,而不能命中phone索引

4.禁止在WHERE條件的屬性上使用函數(shù)或者表達式

SELECT uid FROM tb_user WHERE from_unixtime(day)>=‘2017-02-15’ 會導(dǎo)致全表掃描
正確的寫法是:SELECT uid FROM tb_user WHERE day>= unix_timestamp(‘2017-02-15 00:00:00’)

5.禁止負向查詢,以及%開頭的模糊查詢

  • 負向查詢條件:NOT手蝎、!=榕莺、<>、!<棵介、!>钉鸯、NOT IN、NOT LIKE等邮辽,會導(dǎo)致全表掃描

  • %開頭的模糊查詢唠雕,會導(dǎo)致全表掃描

6.禁止大表使用JOIN查詢贸营,禁止大表使用子查詢。超過三個表禁止 join岩睁。需要 join 的字段钞脂,數(shù)據(jù)類型保持絕對一致;多表關(guān)聯(lián)查詢時捕儒,保證被關(guān)聯(lián)的字段需要有索引芳肌。

對數(shù)據(jù)庫性能影響較大的數(shù)據(jù)庫特性較少使用,解放數(shù)據(jù)庫CPU肋层,把復(fù)雜邏輯計算放到服務(wù)層亿笤。

7.禁止使用OR條件,必須改為IN查詢

8.應(yīng)用程序必須捕獲SQL異常栋猖,并有相應(yīng)處理

9.禁止在主庫上執(zhí)行sum,count等復(fù)雜的耗時統(tǒng)計分析語句

七 .行為規(guī)范

1.禁止使用應(yīng)用程序配置文件內(nèi)的帳號手工訪問線上數(shù)據(jù)庫

2.禁止非DBA對線上數(shù)據(jù)庫進行寫操作净薛,修改線上數(shù)據(jù)需要提交工單,由DBA執(zhí)行蒲拉,提交的SQL語句必須經(jīng)過測試

3.分配非DBA以只讀帳號肃拜,必須通過VPN+跳板機訪問授權(quán)的從庫

4.開發(fā)、測試雌团、線上環(huán)境隔離

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末燃领,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锦援,更是在濱河造成了極大的恐慌猛蔽,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灵寺,死亡現(xiàn)場離奇詭異曼库,居然都是意外死亡,警方通過查閱死者的電腦和手機略板,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門毁枯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叮称,你說我怎么就攤上這事种玛。” “怎么了瓤檐?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵赂韵,是天一觀的道長。 經(jīng)常有香客問我距帅,道長右锨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任碌秸,我火速辦了婚禮绍移,結(jié)果婚禮上悄窃,老公的妹妹穿的比我還像新娘。我一直安慰自己蹂窖,他們只是感情好轧抗,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞬测,像睡著了一般横媚。 火紅的嫁衣襯著肌膚如雪撮胧。 梳的紋絲不亂的頭發(fā)上惠毁,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音聂渊,去河邊找鬼孝宗。 笑死穷躁,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的因妇。 我是一名探鬼主播问潭,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼婚被!你這毒婦竟也來了狡忙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤址芯,失蹤者是張志新(化名)和其女友劉穎灾茁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體是复,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡删顶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了淑廊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡特咆,死狀恐怖季惩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腻格,我是刑警寧澤画拾,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站菜职,受9級特大地震影響青抛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酬核,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一蜜另、第九天 我趴在偏房一處隱蔽的房頂上張望适室。 院中可真熱鬧,春花似錦举瑰、人聲如沸捣辆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汽畴。三九已至,卻和暖如春耸序,著一層夾襖步出監(jiān)牢的瞬間忍些,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工坎怪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罢坝,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓芋忿,卻偏偏與公主長得像炸客,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子戈钢,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應(yīng)的列上鍵入重復(fù)值時痹仙,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,256評論 0 9
  • 今天看到一位朋友寫的mysql筆記總結(jié)殉了,覺得寫的很詳細很用心开仰,這里轉(zhuǎn)載一下,供大家參考下薪铜,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,725評論 0 30
  • 一众弓、MySQL優(yōu)化 MySQL優(yōu)化從哪些方面入手: (1)存儲層(數(shù)據(jù)) 構(gòu)建良好的數(shù)據(jù)結(jié)構(gòu)「艄浚可以大大的提升我們S...
    寵辱不驚丶歲月靜好閱讀 2,422評論 1 8
  • 2017年1月6日群資料整理目錄 出彩分享一:希坦情緒密碼六十秒分享——1.4 出彩分享二:希坦情緒密碼六十秒分享...
    麗的自白書閱讀 436評論 0 0
  • 我是一個勞工 每天飽受疾病的糾纏谓娃, 我去教堂修女嫌我亂, 我去餐館經(jīng)理罵我滾蛋蜒滩, 我去醫(yī)院大夫指著我的額頭說我沒有...
    無敵的鯉魚閱讀 262評論 2 3