【轉】58到家MySQL軍規(guī)升級版

一儡循、基礎規(guī)范

  • 表存儲引擎必須使用InnoDB

  • 表字符集默認使用utf8烹笔,必要時候使用utf8mb4

解讀:

(1)通用伙窃,無亂碼風險,漢字3字節(jié),英文1字節(jié)

(2)utf8mb4是utf8的超集撞秋,有存儲4字節(jié)例如表情符號時长捧,使用它

  • 禁止使用存儲過程,視圖部服,觸發(fā)器唆姐,Event

解讀:

(1)對數據庫性能影響較大,互聯網業(yè)務廓八,能讓站點層和服務層干的事情奉芦,不要交到數據庫層

(2)調試,排錯剧蹂,遷移都比較困難声功,擴展性較差

  • 禁止在數據庫中存儲大文件,例如照片宠叼,可以將大文件存儲在對象存儲系統(tǒng)先巴,數據庫中存儲路徑

  • 禁止在線上環(huán)境做數據庫壓力測試

  • 測試,開發(fā)冒冬,線上數據庫環(huán)境必須隔離

二伸蚯、命名規(guī)范

  • 庫名,表名简烤,列名必須用小寫剂邮,采用下劃線分隔

解讀:abc,Abc横侦,ABC都是給自己埋坑

  • 庫名挥萌,表名,列名必須見名知義枉侧,長度不要超過32字符

解讀:tmp引瀑,wushan誰TM知道這些庫是干嘛的

  • 庫備份必須以bak為前綴,以日期為后綴

  • 從庫必須以-s為后綴

  • 備庫必須以-ss為后綴

三榨馁、表設計規(guī)范

  • 單實例表個數必須控制在2000個以內

  • 單表分表個數必須控制在1024個以內

  • 表必須有主鍵憨栽,推薦使用UNSIGNED整數為主鍵

潛在坑:刪除無主鍵的表,如果是row模式的主從架構翼虫,從庫會掛住

  • 禁止使用外鍵屑柔,如果要保證完整性,應由應用程式實現

解讀:外鍵使得表之間相互耦合蛙讥,影響update/delete等SQL性能锯蛀,有可能造成死鎖灭衷,高并發(fā)情況下容易成為數據庫瓶頸

  • 建議將大字段次慢,訪問頻度低的字段拆分到單獨的表中存儲,分離冷熱數據

解讀:具體參加《如何實施數據庫垂直拆分

四、列設計規(guī)范

  • 根據業(yè)務區(qū)分使用tinyint/int/bigint迫像,分別會占用1/4/8字節(jié)

  • 根據業(yè)務區(qū)分使用char/varchar

解讀:

(1)字段長度固定劈愚,或者長度近似的業(yè)務場景,適合使用char闻妓,能夠減少碎片菌羽,查詢性能高

(2)字段長度相差較大,或者更新較少的業(yè)務場景由缆,適合使用varchar注祖,能夠減少空間

  • 根據業(yè)務區(qū)分使用datetime/timestamp

解讀:前者占用5個字節(jié),后者占用4個字節(jié)均唉,存儲年使用YEAR是晨,存儲日期使用DATE,存儲時間使用datetime

  • 必須把字段定義為NOT NULL并設默認值

解讀:

(1)NULL的列使用索引舔箭,索引統(tǒng)計罩缴,值都更加復雜,MySQL更難優(yōu)化

(2)NULL需要更多的存儲空間

(3)NULL只能采用IS NULL或者IS NOT NULL层扶,而在=/!=/in/not in時有大坑

  • 使用INT UNSIGNED存儲IPv4箫章,不要用char(15)

  • 使用varchar(20)存儲手機號,不要使用整數

解讀:

(1)牽扯到國家代號镜会,可能出現+/-/()等字符檬寂,例如+86

(2)手機號不會用來做數學運算

(3)varchar可以模糊查詢,例如like ‘138%’

  • 使用TINYINT來代替ENUM

解讀:ENUM增加新值要進行DDL操作

五稚叹、索引規(guī)范

  • 唯一索引使用uniq_[字段名]來命名

  • 非唯一索引使用idx_[字段名]來命名

  • 單張表索引數量建議控制在5個以內

解讀:

(1)互聯網高并發(fā)業(yè)務焰薄,太多索引會影響寫性能

(2)生成執(zhí)行計劃時,如果索引太多扒袖,會降低性能塞茅,并可能導致MySQL選擇不到最優(yōu)索引

(3)異常復雜的查詢需求,可以選擇ES等更為適合的方式存儲

  • 組合索引字段數不建議超過5個

解讀:如果5個字段還不能極大縮小row范圍季率,八成是設計有問題

  • 不建議在頻繁更新的字段上建立索引

  • 非必要不要進行JOIN查詢野瘦,如果要進行JOIN查詢,被JOIN的字段必須類型相同飒泻,并建立索引

解讀:踩過因為JOIN字段類型不一致鞭光,而導致全表掃描的坑么?

  • 理解組合索引最左前綴原則泞遗,避免重復建設索引惰许,如果建立了(a,b,c),相當于建立了(a), (a,b), (a,b,c)

六史辙、SQL規(guī)范

  • 禁止使用select *汹买,只獲取必要字段

解讀:

(1)select *會增加cpu/io/內存/帶寬的消耗

(2)指定字段能有效利用索引覆蓋

(3)指定字段查詢佩伤,在表結構變更時,能保證對應用程序無影響

  • insert必須指定字段晦毙,禁止使用insert into T values()

解讀:指定字段插入生巡,在表結構變更時,能保證對應用程序無影響

  • 隱式類型轉換會使索引失效见妒,導致全表掃描

  • 禁止在where條件列使用函數或者表達式

解讀:導致不能命中索引孤荣,全表掃描

  • 禁止負向查詢以及%開頭的模糊查詢

解讀:導致不能命中索引,全表掃描

  • 禁止大表JOIN和子查詢

  • 同一個字段上的OR必須改寫問IN须揣,IN的值必須少于50個

  • 應用程序必須捕獲SQL異常

解讀:方便定位線上問題

說明:本軍規(guī)適用于并發(fā)量大盐股,數據量大的典型互聯網業(yè)務,可直接帶走參考耻卡,不謝遂庄。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市劲赠,隨后出現的幾起案子涛目,更是在濱河造成了極大的恐慌,老刑警劉巖凛澎,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霹肝,死亡現場離奇詭異,居然都是意外死亡塑煎,警方通過查閱死者的電腦和手機沫换,發(fā)現死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來最铁,“玉大人讯赏,你說我怎么就攤上這事±湮荆” “怎么了漱挎?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長雀哨。 經常有香客問我磕谅,道長,這世上最難降的妖魔是什么雾棺? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任膊夹,我火速辦了婚禮,結果婚禮上捌浩,老公的妹妹穿的比我還像新娘放刨。我一直安慰自己,他們只是感情好尸饺,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布进统。 她就那樣靜靜地躺著拓诸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪麻昼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天馋辈,我揣著相機與錄音抚芦,去河邊找鬼。 笑死迈螟,一個胖子當著我的面吹牛叉抡,可吹牛的內容都是我干的。 我是一名探鬼主播答毫,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼褥民,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了洗搂?” 一聲冷哼從身側響起消返,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耘拇,沒想到半個月后撵颊,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡惫叛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年倡勇,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘉涌。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡妻熊,死狀恐怖,靈堂內的尸體忽然破棺而出仑最,到底是詐尸還是另有隱情扔役,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布警医,位于F島的核電站厅目,受9級特大地震影響,放射性物質發(fā)生泄漏法严。R本人自食惡果不足惜损敷,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望深啤。 院中可真熱鬧拗馒,春花似錦、人聲如沸溯街。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挥等,卻和暖如春友绝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肝劲。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工迁客, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辞槐。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓掷漱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親榄檬。 傳聞我的和親對象是個殘疾皇子卜范,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內容