表的垂直分割和水平分割

2021-06-19 01:17:28 字數 1027 閱讀 5743

1,水平分割:

例:qq的登入表。假設qq的使用者有100億,如果只有一張表,每個使用者登入的時候資料庫都要從這100億中查詢,會很慢很慢。如果將這一張表分成100份,每張表有1億條,就小了很多,比如qq0,qq1,qq1...qq99表。

使用者登入的時候,可以將使用者的id%100,那麼會得到0-99的數,查詢表的時候,將表名qq跟取模的數連線起來,就構建了表名。比如123456789使用者,取模的89,那麼就到qq89表查詢,查詢的時間將會大大縮短。

這就是水平分割。

2,垂直分割:

垂直分割指的是:表的記錄並不多,但是欄位卻很長,表占用空間很大,檢索表的時候需要執行大量的io,嚴重降低了效能。這時需要把大的字段拆分到另乙個表,並且該錶與原表是一對一的關係。

例如學生答題表tt:有如下字段:

id name 分數 題目 回答

其中題目和回答是比較大的字段,id name 分數比較小。

如果我們只想查詢id為8的學生的分數:select 分數 from tt where id = 8;雖然知識查詢分數,但是題目和回答這兩個大字段也是要被掃瞄的,很消耗效能。但是我們只關心分數,並不想查詢題目和回答。這就可以使用垂直分割。我們可以把題目單獨放到一張表中,通過id與tt表建立一對一的關係,同樣將回答單獨放到一張表中。這樣我們插敘tt中的分數的時候就不會掃瞄題目和回答了。

3,其他要點:

1)存放、檔案等大檔案用檔案系統儲存。資料庫只儲存路徑,和檔案存放在檔案系統,甚至單獨存放在一台伺服器(圖床)。

2)資料引數配置。

最重要的引數就是記憶體,我們主要用的innodb引擎,所以下面兩個引數調的很大:

innodb_additional_mem_pool_size=64m

innodb_buffer_pool_size=1g

對於myisam,需要調整key_buffer_size,當然調整引數還是要看狀態,用show status語句可以看到當前狀態,以決定該調整哪些引數。

4,合理的硬體資源和作業系統

如果機器的記憶體超過4g,那麼應當採用64位作業系統和64位mysql。

水平分割 垂直分割 和 庫表雜湊 概念 說明

根據一列或多列資料的值把資料行放到兩個獨立的表中。即按記錄進分分割,不同的記錄可以分開儲存,每個子表的列數相同。水平分割槽將表分為多個表。每個表包含的列數相同,但是行更少。例如,可以將乙個包含十億行的表水平分割槽成 12 個表,每個小表表示特定年份內乙個月的資料。任何需要特定月份資料的查詢只需引用相...

水平分割 垂直分割 和 庫表雜湊 概念 說明

根據一列或多列資料的值把資料行放到兩個獨立的表中。即按記錄進分分割,不同的記錄可以分開儲存,每個子表的列數相同。水平分割槽將表分為多個表。每個表包含的列數相同,但是行更少。例如,可以將乙個包含十億行的表水平分割槽成 12 個表,每個小表表示特定年份內乙個月的資料。任何需要特定月份資料的查詢只需引用相...

資料的水平分割

早前公司有個大系統沒有做資料的水平分割,導致興許的效能優化不能做到最佳,有些功能優化到7s,8s就無法繼續了。這個大系統曾經是分21個點部署,然後進行了大集中,僅僅部署了乙個點。1.在做資料的水平切割之前一定要理解系統的業務。我的系統是mis,資料能夠分為兩類 一類是基礎資料,一類是業務流程資料。基...