高性能MySQL讀書筆記 - 第四章

第四章

選擇數(shù)據(jù)類型甩挫,幾個簡單的原則:

  1. 更小的通常更好
  2. 簡單就好吁断,比如使用MySQL內(nèi)建datetime、timestamp槐壳,不使用字符串存儲時間然低。使用整數(shù)存儲IP地址 SELECT INET_ATON('192.168.1.212'), INET_NTOA(3232235988)
  3. 盡量避免NULL

摘要

  • 當數(shù)據(jù)量比較大時候,可以考慮使用BIGINT代替DECIMAL雳攘,將存儲的貨幣單位根據(jù)小數(shù)位數(shù)乘以相應(yīng)倍數(shù)带兜。
  • varchar 需要1或者2個額外字節(jié)存儲字符串的長度,如果列的最大長度<=255字節(jié)吨灭,需要1個字節(jié)刚照,否則2個字節(jié)。另外喧兄,varchar變長當更新時候无畔,有可能會導致分裂頁進行存儲。Innodb會把過長的varchar存儲為BLOB吠冤。
  • 下面情況適用varchar合適的: 字符串最大長度比平均長度大很多浑彰;列更新很少,所以碎片不是問題拯辙;使用了UTF-8復(fù)雜字符集郭变,每個字符串使用不同的字符數(shù)存儲。
  • varchar(255)涯保,定義的不是字節(jié)數(shù)诉濒,是字符數(shù)。
  • char(3)如果采用單字節(jié)字符集夕春,存儲需要3個字節(jié)未荒。而varchar(3),需要4個字節(jié)
  • varchar(5)和varchar(200)存儲 'hello'的空間開銷是一樣的撇他,那么使用更短列有什么優(yōu)勢呢茄猫?事實證明有很大優(yōu)勢。更大的列會消耗更多的存儲困肩。因為MySQL通用會分配固定大小的內(nèi)存塊來保存內(nèi)部值划纽。尤其是使用內(nèi)存臨時表進行排序或操作時特別糟糕,在利用磁盤臨時表也同樣糟糕锌畸。
  • 不使用ENUM類型勇劣,如COLOR,現(xiàn)在要加一個YELLOW枚舉潭枣,需要Alter table比默。如果改變原始枚舉值,比如把WHITE變?yōu)镽ED盆犁,存儲變?yōu)?'空字符串命咐。

選擇標示列類型

標示列,一般是主鍵或者關(guān)聯(lián)列谐岁。

  • 整數(shù)是標識列列的最后選擇醋奠,很快并且可以Auto_increment
  • 如果可以避免使用字符串作為標示列榛臼,很消耗空間并且比數(shù)字慢。最多有6倍的性能下降窜司。insert語句使用字符串做主鍵可能會導致頁分裂沛善、磁盤隨機訪問,innodb還會導致聚簇索引碎片塞祈。如果一定要使用UUID金刁,應(yīng)該移除-,使用UNHex函數(shù)轉(zhuǎn)換為16字節(jié)數(shù)字议薪,并存儲在BINARY(16)[blob]列尤蛮,檢索是通過HEX函數(shù)來格式為十六進制。所以還是推薦使用整數(shù)笙蒙。

范式和反范式

反范式是值schema把數(shù)據(jù)都放一張表里,可以很好避免關(guān)聯(lián)

計數(shù)器表的優(yōu)化

如果有一張表CREATE TABLE hit_counter(cnt int unsigned not null)
記錄點擊次數(shù)捅位,每次更新這行數(shù)據(jù)事務(wù)來說轧葛,都有一個全局的互斥鎖mutex。要獲得更高性能可以采用分治思想尿扯,把熱點行數(shù)據(jù)分拆。

CREATE TABLE hit_counter( slot tinyint unsigned not null primary key,
cnt int unsigned not null);
insert INTO hit_counter(slot, cnt) VALUE (RAND() * 100, 1)
ON DUPLICATE KEY UPDATE cnt = cnt + 1;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衷笋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子辟宗,更是在濱河造成了極大的恐慌,老刑警劉巖吝秕,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異烁峭,居然都是意外死亡,警方通過查閱死者的電腦和手機约郁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鬓梅,“玉大人,你說我怎么就攤上這事绽快∈堪溃” “怎么了谎僻?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長艘绍。 經(jīng)常有香客問我赤拒,道長,這世上最難降的妖魔是什么挎挖? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任航夺,我火速辦了婚禮,結(jié)果婚禮上阳掐,老公的妹妹穿的比我還像新娘始衅。我一直安慰自己缭保,他們只是感情好,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布艺骂。 她就那樣靜靜地躺著,像睡著了一般钳恕。 火紅的嫁衣襯著肌膚如雪别伏。 梳的紋絲不亂的頭發(fā)上忧额,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機與錄音宙址,去河邊找鬼。 笑死抡砂,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的注益。 我是一名探鬼主播碴巾,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼丑搔,長吁一口氣:“原來是場噩夢啊……” “哼提揍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起劳跃,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刨仑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夹姥,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年轻抱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旦部。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖志鹃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情曹铃,我是刑警寧澤缰趋,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布秘血,位于F島的核電站,受9級特大地震影響评甜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忍坷,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佩研。 院中可真熱鬧柑肴,春花似錦、人聲如沸晰骑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秽荞。三九已至抚官,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耗式,已是汗流浹背胁住。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留儡司,地道東北人娱挨。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓捕犬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碉碉。 傳聞我的和親對象是個殘疾皇子柴钻,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

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