關(guān)于數(shù)據(jù)庫(kù)的水平分割和垂直分割的幾點(diǎn)介紹
在數(shù)據(jù)庫(kù)操作中,我們常常會(huì)聽說(shuō)這兩個(gè)詞語(yǔ):水平分割和垂直分割。那么到底什么是數(shù)據(jù)庫(kù)的水平分割,什么是數(shù)據(jù)庫(kù)的垂直分割呢?本文我們就來(lái)介紹一下這部分內(nèi)容。
1、水平分割:
按記錄進(jìn)分分割,不同的記錄可以分開保存,每個(gè)子表的列數(shù)相同。
水平分割通常在下面的情況下使用:
A 表很大,分割后可以降低在查詢時(shí)需要讀的數(shù)據(jù)和索引的頁(yè)數(shù),同時(shí)也降低了索引的層數(shù),提高查詢速度。
B 表中的數(shù)據(jù)本來(lái)就有獨(dú)立性,例如表中分別記錄各個(gè)地區(qū)的數(shù)據(jù)或不同時(shí)期的數(shù)據(jù),特別是有些數(shù)據(jù)常用,而另外一些數(shù)據(jù)不常用。
C需要把數(shù)據(jù)存放到多個(gè)介質(zhì)上。
例如法規(guī)表law就可以分成兩個(gè)表active-law和 inactive-law。activea-authors表中的內(nèi)容是正生效的法規(guī),是經(jīng)常使用的,而inactive-law表則使已經(jīng)作廢的法規(guī),不常被查詢。水平分割會(huì)給應(yīng)用增加復(fù)雜度,它通常在查詢時(shí)需要多個(gè)表名,查詢所有數(shù)據(jù)需要union操作。在許多數(shù)據(jù)庫(kù)應(yīng)用中,這種復(fù)雜性會(huì)超過(guò)它帶來(lái)的優(yōu)點(diǎn),因?yàn)橹灰饕P(guān)鍵字不大,則在索引用于查詢時(shí),表中增加兩到三倍數(shù)據(jù)量,查詢時(shí)也就增加讀一個(gè)索引層的磁盤次數(shù)。
2、垂直分割:
按列進(jìn)行分割,即把一條記錄分開多個(gè)地方保存,每個(gè)子表的行數(shù)相同。
把主碼和一些列放到一個(gè)表,然后把主碼和另外的列放到另一個(gè)表中。如果一個(gè)表中某些列常用,而另外一些列不常用,則可以采用垂直分割,另外垂直分割可以使得數(shù)據(jù)行變小,一個(gè)數(shù)據(jù)頁(yè)就能存放更多的數(shù)據(jù),在查詢時(shí)就會(huì)減少I/O 次數(shù)。其缺點(diǎn)是需要管理冗余列,查詢所有數(shù)據(jù)需要join操作?!?/p>
例如有表T1
id name qty
--------------
1 p1 10
2 p2 20
3 p3 30
4 p4 40
......
......
垂直分割就是按列進(jìn)行分割,即把一條記錄分開多個(gè)地方保存,每個(gè)子表的行數(shù)相同。
例如表T1,可以把id和name放到數(shù)據(jù)文件p1,把qty放到數(shù)據(jù)文件p2。
水平分割就是按記錄進(jìn)分分割,不同的記錄可以分開保存,每個(gè)子表的列數(shù)相同。
像表T1,可以把id為單數(shù)的放到數(shù)據(jù)文件P1,雙數(shù)的放到數(shù)據(jù)文件P2。
表散列與水平分割相似,但沒(méi)有水平分割那樣的明顯分割界限,它由哈希函數(shù)和鍵值決定一條記錄的保存文件,這樣是為了IO更加均衡。
關(guān)于數(shù)據(jù)庫(kù)的垂直分割與水平分割的知識(shí)就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】






