14.Mysql 30條軍規(guī)

一减拭、基礎(chǔ)規(guī)范
(1)必須使用InnoDB存儲引擎

解讀:支持事務(wù)晕翠、行級鎖朦肘、并發(fā)性能更好、CPU及內(nèi)存緩存頁優(yōu)化使得資源利用率更高

(2)必須使用UTF8字符集

解讀:萬國碼嘱蛋,無需轉(zhuǎn)碼患久,無亂碼風(fēng)險,節(jié)省空間

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

解讀:N年后誰tm知道這個r1,r2,r3字段是干嘛的

(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ù)層具備更好的擴(kuò)展性偏竟,能夠輕易實現(xiàn)“增機(jī)器就加性能”煮落。數(shù)據(jù)庫擅長存儲與索引,CPU計算還是上移吧

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

解讀:為何要讓數(shù)據(jù)庫做它不擅長的事情踊谋?大文件和照片存儲在文件系統(tǒng)蝉仇,數(shù)據(jù)庫里存URI多好

二、命名規(guī)范

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

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

業(yè)務(wù)名稱:xxx

線上環(huán)境:dj.xxx.db

開發(fā)環(huán)境:dj.xxx.rdb

測試環(huán)境:dj.xxx.tdb

從庫在名稱后加-s標(biāo)識睦疫,備庫在名稱后加-ss標(biāo)識

線上從庫:dj.xxx-s.db

線上備庫:dj.xxx-sss.db

(8)庫名害驹、表名、字段名:小寫蛤育,下劃線風(fēng)格宛官,不超過32個字符,必須見名知意瓦糕,禁止拼音英文混用

(9)表名t_xxx底洗,非唯一索引名idx_xxx,唯一索引名uniq_xxx

三刻坊、表設(shè)計規(guī)范

(10)單實例表數(shù)目必須小于500

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

(12)表必須有主鍵枷恕,例如自增主鍵

解讀:

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

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

c) 無主鍵的表刪除,在row模式的主從架構(gòu)旁趟,會導(dǎo)致備庫夯住

(13)禁止使用外鍵昼激,如果有外鍵完整性約束,需要應(yīng)用程序控制

解讀:外鍵會導(dǎo)致表與表之間耦合锡搜,update與delete操作都會涉及相關(guān)聯(lián)的表橙困,十分影響sql 的性能,甚至?xí)斐伤梨i耕餐。高并發(fā)情況下容易造成數(shù)據(jù)庫性能凡傅,大數(shù)據(jù)高并發(fā)業(yè)務(wù)場景數(shù)據(jù)庫使用以性能優(yōu)先

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

(14)必須把字段定義為NOT NULL并且提供默認(rèn)值

解讀:

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

b)null 這種類型MySQL內(nèi)部需要進(jìn)行特殊處理夏跷,增加數(shù)據(jù)庫處理記錄的復(fù)雜性哼转;同等條件下,表中有較多空字段的時候槽华,數(shù)據(jù)庫的處理性能會降低很多

c)null值需要更多的存儲空壹蔓,無論是表還是索引中每行中的null的列都需要額外的空間來標(biāo)識

d)對null 的處理時候,只能采用is null或is not null猫态,而不能采用=佣蓉、in、<懂鸵、<>偏螺、!=、not in這些操作符號匆光。如:where name!=’shenjian’套像,如果存在name為null值的記錄,查詢結(jié)果就不會包含name為null值的記錄

(15)禁止使用TEXT终息、BLOB類型

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

(16)禁止使用小數(shù)存儲貨幣

解讀:使用整數(shù)吧柳譬,小數(shù)容易導(dǎo)致錢對不上

(17)必須使用varchar(20)存儲手機(jī)號

解讀:

a)涉及到區(qū)號或者國家代號,可能出現(xiàn)+-()

b)手機(jī)號會去做數(shù)學(xué)運(yùn)算么续镇?

c)varchar可以支持模糊查詢美澳,例如:like“138%”

(18)禁止使用ENUM,可使用TINYINT代替

解讀:

a)增加新的ENUM值要做DDL操作

b)ENUM的內(nèi)部實際存儲就是整數(shù)摸航,你以為自己定義的是字符串制跟?

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

(19)單表索引建議控制在5個以內(nèi)

(20)單索引字段數(shù)不允許超過5個

解讀:字段超過5個時酱虎,實際已經(jīng)起不到有效過濾數(shù)據(jù)的作用了

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

解讀:

a)更新會變更B+樹,更新頻繁的字段建立索引會大大降低數(shù)據(jù)庫性能

b)“性別”這種區(qū)分度不大的屬性读串,建立索引是沒有什么意義的聊记,不能有效過濾數(shù)據(jù),性能與全表掃描類似

(22)建立組合索引恢暖,必須把區(qū)分度高的字段放在前面

解讀:能夠更加有效的過濾數(shù)據(jù)

六排监、SQL使用規(guī)范

(23)禁止使用SELECT *,只獲取必要的字段杰捂,需要顯示說明列屬性

解讀:

a)讀取不需要的列會增加CPU社露、IO、NET消耗

b)不能有效的利用覆蓋索引

c)使用SELECT *容易在增加或者刪除字段后出現(xiàn)程序BUG

(24)禁止使用INSERT INTO t_xxx VALUES(xxx)琼娘,必須顯示指定插入的列屬性

解讀:容易在增加或者刪除字段后出現(xiàn)程序BUG

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

解讀:SELECT uid FROM t_user WHERE phone=13812345678 會導(dǎo)致全表掃描峭弟,而不能命中phone索引,猜猜為什么脱拼?(這個線上問題不止出現(xiàn)過一次)

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

解讀:SELECT uid FROM t_user WHERE from_unixtime(day)>='2017-02-15' 會導(dǎo)致全表掃描

正確的寫法是:SELECT uid FROM t_user WHERE day>= unix_timestamp('2017-02-15 00:00:00')

(27)禁止負(fù)向查詢瞒瘸,以及%開頭的模糊查詢

解讀:

a)負(fù)向查詢條件:NOT、!=熄浓、<>情臭、!<、!>赌蔑、NOT IN俯在、NOT LIKE等,會導(dǎo)致全表掃描

b)%開頭的模糊查詢娃惯,會導(dǎo)致全表掃描

(28)禁止大表使用JOIN查詢跷乐,禁止大表使用子查詢

解讀:會產(chǎn)生臨時表,消耗較多內(nèi)存與CPU趾浅,極大影響數(shù)據(jù)庫性能

(29)禁止使用OR條件愕提,必須改為IN查詢

解讀:舊版本Mysql的OR查詢是不能命中索引的,即使能命中索引皿哨,為何要讓數(shù)據(jù)庫耗費(fèi)更多的CPU幫助實施查詢優(yōu)化呢浅侨?

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末证膨,一起剝皮案震驚了整個濱河市如输,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌央勒,老刑警劉巖不见,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異订歪,居然都是意外死亡脖祈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門刷晋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盖高,“玉大人,你說我怎么就攤上這事眼虱∮靼拢” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵捏悬,是天一觀的道長撞蚕。 經(jīng)常有香客問我,道長过牙,這世上最難降的妖魔是什么甥厦? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任纺铭,我火速辦了婚禮,結(jié)果婚禮上刀疙,老公的妹妹穿的比我還像新娘舶赔。我一直安慰自己,他們只是感情好谦秧,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布竟纳。 她就那樣靜靜地躺著,像睡著了一般疚鲤。 火紅的嫁衣襯著肌膚如雪锥累。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天集歇,我揣著相機(jī)與錄音桶略,去河邊找鬼。 笑死鬼悠,一個胖子當(dāng)著我的面吹牛删性,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焕窝,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼蹬挺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了它掂?” 一聲冷哼從身側(cè)響起巴帮,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虐秋,沒想到半個月后榕茧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡客给,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年用押,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靶剑。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜻拨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桩引,到底是詐尸還是另有隱情缎讼,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布坑匠,位于F島的核電站血崭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夹纫,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一咽瓷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捷凄,春花似錦忱详、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽监透。三九已至桶错,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胀蛮,已是汗流浹背院刁。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留粪狼,地道東北人退腥。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像再榄,于是被迫代替她去往敵國和親狡刘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

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

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時困鸥,會觸發(fā)此異常嗅蔬。 O...
    我想起個好名字閱讀 5,306評論 0 9
  • Valentine 轉(zhuǎn)載請標(biāo)明出處。 一疾就、基礎(chǔ)規(guī)范 (1)必須使用InnoDB存儲引擎解讀:支持事務(wù)澜术、行級鎖、并發(fā)...
    valentine_liang閱讀 918評論 2 24
  • 今天看到一位朋友寫的mysql筆記總結(jié)猬腰,覺得寫的很詳細(xì)很用心鸟废,這里轉(zhuǎn)載一下,供大家參考下姑荷,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,730評論 0 30
  • 數(shù)據(jù)庫軍規(guī)的背景是“并發(fā)量大盒延、數(shù)據(jù)量大的互聯(lián)網(wǎng)業(yè)務(wù)”,這類業(yè)務(wù)架構(gòu)設(shè)計的重點往往是吞吐量厢拭,性能優(yōu)先(和錢相關(guān)的少部...
    偉寶寶_7288閱讀 534評論 0 0
  • 原文地址作者: 58沈劍軍規(guī)適用場景:并發(fā)量大兰英、數(shù)據(jù)量大的互聯(lián)網(wǎng)業(yè)務(wù)軍規(guī):介紹內(nèi)容解讀:講解原因,解讀比軍規(guī)更重要...
    六月星空2011閱讀 495評論 0 1