垂直拆分是根據資料庫裡面的資料表的相關性進行拆分,比如:乙個資料庫裡面既存在使用者資料,又存在訂單資料,那麼垂直拆分可以把使用者資料放入到使用者庫,把訂單資料放到訂單庫。垂直分表是對資料表進行垂直拆分的一種方式,常見是把乙個多欄位的大表按常用字段和非常用字段進行拆分,每個表裡面的資料記錄數一般情況下是相同的,只是欄位不一樣,使用主鍵關聯。
比如原始使用者表是:
垂直拆分後的表是:
垂直拆分的優點是:
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垂直拆分與水平拆分
垂直拆分 垂直拆分是根據資料庫裡面的資料表的業務進行拆分,比如 乙個資料庫裡面既存在使用者資料,又存在訂單資料,那麼垂直拆分可以把使用者資料放入到使用者庫,把訂單資料放到訂單庫。垂直分表是對資料表進行垂直拆分的一種方式,常見是把乙個多欄位的大表按常用字段和非常用字段進行拆分,每個表裡面的資料記錄數一...