優(yōu)化表的數(shù)據(jù)類型
procedure anylyse()
可以對(duì)當(dāng)前應(yīng)用的表進(jìn)行分析睦擂,該函數(shù)可以對(duì)數(shù)據(jù)表中列的數(shù)據(jù)類型提出優(yōu)化建議
select * from tablename procedure analyse();
通過(guò)拆分提高表的訪問(wèn)效率
這里所說(shuō)的拆分,是指對(duì)數(shù)據(jù)表進(jìn)行拆分顿仇。如果針對(duì) MyISAM 類型的表進(jìn)行,那么有兩種拆分方法
- 第一種是垂直拆分鸿吆,即把主碼和一些列放到一個(gè)表述呐,然后把主碼和另外的列放到另一個(gè)表中。如果一個(gè)表中某些列常用乓搬,而另一些列不常用,則可以采用垂直拆分激蹲,另外江掩,垂直拆分可以使得數(shù)據(jù)行變小含蓉,一個(gè)數(shù)據(jù)頁(yè)就能存放更多的數(shù)據(jù)项郊,在查詢時(shí)就會(huì)減少 I/O 次數(shù)斟赚。其缺點(diǎn)是需要管理冗余列,查詢所有數(shù)據(jù)需要聯(lián)合操作
- 第二種方法是水平拆分任洞,即根據(jù)一列或多列數(shù)據(jù)的值把數(shù)據(jù)行放到兩個(gè)獨(dú)立的表中发侵。水平拆分通常在以下幾種情況下使用:
- 表很大,分割后可以降低在查詢時(shí)需要讀的數(shù)據(jù)和索引的頁(yè)數(shù)刃鳄,同時(shí)也降低了索引的層數(shù),提高查詢速度
- 表中的數(shù)據(jù)本來(lái)就有獨(dú)立性挪鹏,例如愉烙,表中分別記錄各個(gè)地區(qū)的數(shù)據(jù)或不同時(shí)期的數(shù)據(jù),特別是有些數(shù)據(jù)常用步责,而另外一些數(shù)據(jù)不常用
- 而要把數(shù)據(jù)存放到多個(gè)介質(zhì)上
逆規(guī)范化
數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)要滿足規(guī)范化這個(gè)道理大家都非常清楚蔓肯,但是否數(shù)據(jù)的規(guī)范化程度越高越好呢遂鹊?這還是由實(shí)際需求來(lái)決定稿辙。因?yàn)橐?guī)范化越高气忠,那么產(chǎn)生的關(guān)系就越多,關(guān)系過(guò)多的直接結(jié)果就是導(dǎo)致表之間的連接操作越頻繁旧噪,而表之間的連接操作是性能較低的操作,直接影響到查詢的速度宦赠,所以,對(duì)于查詢較多的應(yīng)用勾扭,就需要根據(jù)實(shí)際情況運(yùn)用逆規(guī)范化對(duì)數(shù)據(jù)進(jìn)行設(shè)計(jì),通過(guò)逆規(guī)范化來(lái)提高查詢的性能
反規(guī)范的好處是降低連接操作的需求降低外碼和索引的數(shù)目桅滋,還可能減少表的數(shù)目身辨,相應(yīng)帶來(lái)的問(wèn)題是可能出現(xiàn)數(shù)據(jù)的完整性問(wèn)題。加快查詢速度煌珊,但會(huì)降低修改速度更振。因此,決定做反規(guī)范時(shí)蔬浙,一定要權(quán)衡利弊,仔細(xì)分析應(yīng)用的數(shù)據(jù)存取需求和實(shí)際的性能特點(diǎn)敛滋,好的索引和其他方法經(jīng)常能夠解決性能問(wèn)題绎晃,而不必采用反規(guī)范這種方法
在進(jìn)行反規(guī)范操作之前,要充分考慮數(shù)據(jù)的存取需求庶艾,常用表表的大小,一些特殊的計(jì)算颖榜,數(shù)據(jù)的物理存儲(chǔ)位置等煤裙。常用的反規(guī)范技術(shù)有增加冗余列,增加派生列硼砰,重新組表和分割表
另外,逆規(guī)范技術(shù)需要維護(hù)數(shù)據(jù)的完整性恶阴。無(wú)論使用何種反規(guī)范技術(shù),都需要一定的管理來(lái)維護(hù)數(shù)據(jù)的完整性焦匈,常用的方法是批處理維護(hù)昵仅,應(yīng)用邏輯和觸發(fā)器
使用中間表提高統(tǒng)計(jì)查詢速度
對(duì)于數(shù)據(jù)量較大的表,在其上進(jìn)行統(tǒng)計(jì)查詢通常會(huì)效率很低岩饼,并且還要考慮統(tǒng)計(jì)查詢是否會(huì)對(duì)在線的應(yīng)用產(chǎn)生負(fù)面影響薛夜。通常在這種情況下,使用中間表可以提高統(tǒng)計(jì)查詢的效率
中間表復(fù)制原表部分?jǐn)?shù)據(jù)寞冯,并且與原表相隔離晚伙,在中間表上做統(tǒng)計(jì)查詢不會(huì)對(duì)在線應(yīng)用產(chǎn)生負(fù)面影響
中間表上可以靈活的添加索引或正價(jià)臨時(shí)用的新字段,從而達(dá)到提高統(tǒng)計(jì)查詢效率和輔助統(tǒng)計(jì)查詢作用