mysql 垂直拆分與水平拆分的優缺點詳解

2021-08-29 20:15:07 字數 1215 閱讀 5835

垂直拆分是根據資料庫裡面的資料表的相關性進行拆分,比如:乙個資料庫裡面既存在使用者資料,又存在訂單資料,那麼垂直拆分可以把使用者資料放入到使用者庫,把訂單資料放到訂單庫。垂直分表是對資料表進行垂直拆分的一種方式,常見是把乙個多欄位的大表按常用字段和非常用字段進行拆分,每個表裡面的資料記錄數一般情況下是相同的,只是欄位不一樣,使用主鍵關聯。

比如原始使用者表是:

垂直拆分後的表是:

垂直拆分的優點是:

1. 可以使得資料變小,乙個資料塊(block)就能存放更多的資料,在查詢時就會減少i/o次數(每次查詢時讀取的block就少)

2. 可以達到最大化利用cache的目的,具體在垂直拆分的時候可以將不常變的字段放一起,將經常改變的放一起

3. 資料維護簡單

缺點是:

1. 主鍵出現冗餘,需要管理冗餘例

2.  會引起表連線join操作(增加cpu開銷)可以通過在業務伺服器上進行join來減少資料庫壓力

3.  依然存在單錶資料量過大的問題(需要水平拆分)

4. 事務處理複雜

概述水平拆分是通過某種策略將資料分片來儲存,分庫內分表和分庫兩部分,每片資料會分散到不同的mysql表或庫,達到分布式的效果,能夠支援非常大的資料量。前面的表分割槽本質上也是一種特殊的庫內分表

庫內分表,僅僅是單純的解決了單一表資料過大的問題,由於沒有把錶的資料分布到不同的機器上,因此對於減輕mysql伺服器的壓力來說,並沒有太大的作用,大家還是競爭同乙個物理機上的io、cpu、網路,這個就要通過分庫來解決

水平拆分表如下:

實際情況中往往會是垂直拆分和水平拆分的結合,即將users_a_m和users_n_z再拆成users和userextras,這樣一共四張表

水平拆分的優點是:

缺點是:

歡迎各位交流

原則:群內禁止鄙視、諷刺等任何初學者,否則直接踢群,禁止任何業餘廣告推廣。

垂直拆分與水平拆分

垂直拆分 垂直拆分是指資料表列的拆分,把一張列比較多的表拆分為多張表 通常我們按以下原則進行垂直拆分 把不常用的字段單獨放在一張表。把text,bigint等大字段拆分出來放在附表中。經常組合查詢的列放在一張表中 聯合索引 垂直拆分的表在查詢的時候用join關鍵字連線起來即可。水平拆分 水平拆分是指...

Mysql 水平拆分和垂直拆分

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

Mycat垂直拆分與水平拆分

垂直拆分 垂直拆分是根據資料庫裡面的資料表的業務進行拆分,比如 乙個資料庫裡面既存在使用者資料,又存在訂單資料,那麼垂直拆分可以把使用者資料放入到使用者庫,把訂單資料放到訂單庫。垂直分表是對資料表進行垂直拆分的一種方式,常見是把乙個多欄位的大表按常用字段和非常用字段進行拆分,每個表裡面的資料記錄數一...