1. 程式人生 > >zbb20180919 db 數據庫的水平分割和垂直分割

zbb20180919 db 數據庫的水平分割和垂直分割

同時 gpo 分開 class 介質 什麽 數據庫應用 cti 減少

數據庫的水平分割和垂直分割

數據庫操作中,我們常常會聽說這兩個詞語:水平分割垂直分割。那麽到底什麽是數據庫的水平分割,什麽是數據庫的垂直分割呢?本文我們就來介紹一下這部分內容。

1、水平分割:

按記錄進分分割,不同的記錄可以分開保存,每個子表的列數相同。

水平分割通常在下面的情況下使用:

A 表很大,分割後可以降低在查詢時需要讀的數據和索引的頁數,同時也降低了索引的層數,提高查詢速度。

B 表中的數據本來就有獨立性,例如表中分別記錄各個地區的數據或不同時期的數據,特別是有些數據常用,而另外一些數據不常用。

C需要把數據存放到多個介質上。

例如法規表law就可以分成兩個表active-law和 inactive-law。activea-authors表中的內容是正生效的法規,是經常使用的,而inactive-law表則使已經作廢的法規,不常被查詢。水平分割會給應用增加復雜度,它通常在查詢時需要多個表名,查詢所有數據需要union操作。在許多數據庫應用中,這種復雜性會超過它帶來的優點,因為只要索引關鍵字不大,則在索引用於查詢時,表中增加兩到三倍數據量,查詢時也就增加讀一個索引層的磁盤次數。

2、垂直分割:

按列進行分割,即把一條記錄分開多個地方保存,每個子表的行數相同。

把主碼和一些列放到一個表,然後把主碼和另外的列放到另一個表中。如果一個表中某些列常用,而另外一些列不常用,則可以采用垂直分割,另外垂直分割可以使得數據行變小,一個數據頁就能存放更多的數據,在查詢時就會減少I/O 次數。其缺點是需要管理冗余列,查詢所有數據需要join操作。 

例如有表T1

id name qty

--------------

1 p1 10

2 p2 20

3 p3 30

4 p4 40

......

......

垂直分割就是按列進行分割,即把一條記錄分開多個地方保存,每個子表的行數相同。

例如表T1,可以把id和name放到數據文件p1,把qty放到數據文件p2。

水平分割就是按記錄進分分割,不同的記錄可以分開保存,每個子表的列數相同。

像表T1,可以把id為單數的放到數據文件P1,雙數的放到數據文件P2。

zbb20180919 db 數據庫的水平分割和垂直分割