從SQL Server到MySql(3): schema的數(shù)據(jù)類型優(yōu)化

1,數(shù)據(jù)庫范式

1.1 第一到第三范式

  • 第一范式 1NF. 保證列的原子性, 一列不能再被分為多個列.
  • 第二范式 2NF. 每行必須可以被唯一地區(qū)分. 通常通過加(id)列來實現(xiàn).
    • 沒有包含在主鍵中的列必須完全依賴于主鍵, 而不能只依賴于主鍵的一部分
    • 若有以上情況, 則需要進行表拆分.
  • 第三范式 3NF. 非主鍵列必須直接依賴于主鍵, 不能存在遞歸依賴.
    • 2NF 可以有遞歸依賴.

1.2 遵從范式設(shè)計的優(yōu)劣

  • 范式可以避免數(shù)據(jù)冗余,減少數(shù)據(jù)庫空間,減輕維護數(shù)據(jù)完整性的麻煩.
  • 范式化的更新操作比反范式更快.
  • 范式的問題是范式的等級越高, 設(shè)計出來的表越多, 從而造成操作性能越來越低.
    • 例如, 通常需要關(guān)聯(lián).

1.3 反范式

  • 反范式允許適當(dāng)?shù)娜哂?
    • 用空間換時間. 把數(shù)據(jù)冗余在多個表中.
    • 減少查詢時的表關(guān)聯(lián).
    • 單獨的表也能使用更有效的索引策略.

2 緩存表和匯總表

2.1 保存冗余數(shù)據(jù)

  • 提升性能最好的辦法是在同一張表中保存衍生的冗余數(shù)據(jù).
  • 也可以創(chuàng)建完全獨立的緩存和匯總表.
  • 可選擇使用實時維護或定期重建, 這依賴于具體的應(yīng)用程序.
    • 定期重建會節(jié)省資源, 保持表不會有太多碎片, 以及完全順序組織的(高效)索引.
    • 重建時, 使用"影子表(重命名)"來保證數(shù)據(jù)在重建過程中的可用性.
mysql> drop table if exists sample_new, sample_old;
mysql> create table sample_new like sample;
-- 對sample_new表進行需要的修改.
mysql> rename table sample to sample_old, sample_new to sample.

2.2 物化視圖

  • 物化視圖?是預(yù)先計算并存儲在磁盤上的表, 可通過各種策略刷新和更新.
  • 通過提取對源表的更改, 增量地重新計算物化視圖的內(nèi)容. 而不需要通過查詢原始數(shù)據(jù)來更新視圖.
  • 優(yōu)勢: 計算增量比從源讀取效率高.

2.3 計數(shù)器表

  • 要想獲得更高的并發(fā)更新性能. 可以將計數(shù)器保存在多行中.
    • 預(yù)先在表中增加N(如100) 行數(shù)據(jù).
    • 每次隨機選擇一行進行更新.
      set cnt = cnt+1 where slot = RAND() *100.
    • 獲取結(jié)果時進行SUM(cnt).
  • 若要每隔一段時間(天)開始一個新的計數(shù)器.
    • primary key(day,slot).
    • 不用預(yù)先生成行, 使用 Insert .. ON Duplicate Key Update cnt = cnt +1.
    • 避免表過大
      • 執(zhí)行一個周期性的任務(wù), 合并結(jié)果到0 slot, 同時刪除其它的slot.
    • 所有高性能設(shè)計的初衷: 更快地讀, 更慢地寫.

2.4 加快Alter Table操作的速度

  • Alter Table
    • 過程:
      • 從新的結(jié)構(gòu)創(chuàng)建一個空表.
      • 將舊表所有數(shù)據(jù)插入新表.
      • 刪除舊表.
    • 問題:
      • 耗時, 尤其是當(dāng)內(nèi)存不足而表又過大時.
      • 大部分Alter Table操作將導(dǎo)致MySql服務(wù)中斷.
  • 優(yōu)化Alter Table的方式
    • 方式1: 在一臺不提供服務(wù)的機器上執(zhí)行alter table.然后和提供服務(wù)的機器進行切換.
    • 方式2: 影子拷貝. 創(chuàng)建與原本無關(guān)的新表, 通過重命名和刪除表來交換兩種表.
    • 方式3: 為想要的新結(jié)構(gòu)創(chuàng)建新的.frm文件,然后用它替換掉已有的.
  • 修改/刪除列的默認(rèn)值.
    • 使用modify column 命令會重建表,
    • 而alter column 只是修改了.frm文件.
  • 并不是所有的alter table都會引起表重建, 不需要重建表的操作有:
    • 移除列的Auto_Increment屬性.
    • 增加/移除/更改Enum和Set常量.
  • 快速創(chuàng)建MyISAM 索引.
    • 為了高效地載入數(shù)據(jù)到MyISAM表中,可以使用以下方式.
      • 先禁用索引(Disable Keys), 載入數(shù)據(jù), 然后重新啟用索引(Enable Keys).
      • 在數(shù)據(jù)加載完畢后, 可通過排序構(gòu)建索引.
      • 這種方式對唯一索引無效. 這會導(dǎo)致在內(nèi)存中構(gòu)造唯一索引, 并為載入的每一行檢查唯一性.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛆楞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子毕谴,更是在濱河造成了極大的恐慌讥邻,老刑警劉巖膊爪,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垢袱,死亡現(xiàn)場離奇詭異,居然都是意外死亡硼控,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門胳赌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牢撼,“玉大人,你說我怎么就攤上這事疑苫⊙妫” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵捍掺,是天一觀的道長撼短。 經(jīng)常有香客問我,道長挺勿,這世上最難降的妖魔是什么曲横? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮不瓶,結(jié)果婚禮上禾嫉,老公的妹妹穿的比我還像新娘。我一直安慰自己蚊丐,他們只是感情好熙参,可當(dāng)我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著麦备,像睡著了一般孽椰。 火紅的嫁衣襯著肌膚如雪昭娩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天黍匾,我揣著相機與錄音栏渺,去河邊找鬼。 笑死膀捷,一個胖子當(dāng)著我的面吹牛迈嘹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播全庸,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼秀仲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了壶笼?” 一聲冷哼從身側(cè)響起神僵,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎覆劈,沒想到半個月后保礼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡责语,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年炮障,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坤候。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡胁赢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出白筹,到底是詐尸還是另有隱情智末,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布徒河,位于F島的核電站系馆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏顽照。R本人自食惡果不足惜由蘑,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望代兵。 院中可真熱鬧纵穿,春花似錦、人聲如沸奢人。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽何乎。三九已至句惯,卻和暖如春土辩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抢野。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工拷淘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人指孤。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓启涯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親恃轩。 傳聞我的和親對象是個殘疾皇子结洼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,781評論 2 361

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