日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

水平分表与垂直分表

發布時間:2024/3/12 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 水平分表与垂直分表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 水平分表


(1) 什么是水平分表
水平分表就是指以行為單位對數據進行拆分,一般意義上的分庫分表指的就是水平分表。
分表之后,所有表的結構都是一樣的。


(2) 為什么要水平分表
水平分表可以解決表中的數據量大的問題,如果一張表的數據太多,操作起來會很麻煩,所以分表存儲數據。


(3) 如何進行水平分表
一般可以有范圍法和hash法來進行水平分表。
假設現在有30萬行數據,需要對它們進行水平分表:
范圍法很好理解,可以讓第1-100000行數據存放在表1,第100001-200000行數據存放在表2,第200001-300000行數據存放在表3,就完成了水平分表。
hash法也不難理解,就是選擇一個合適的hash函數,比如說使用取模操作(%),把%3結果為0的數據存放在表1,結果為1的存放在表2,結果為2的存放在表3即可。


2. 垂直分表


(1) 什么是垂直分表
垂直分表就是把一張表按列分為多張表,多張表通過主鍵進行關聯,從而組成完整的數據。
分表之后,每張表的結構都不相同。
(2) 為什么要垂直分表
這主要跟某些數據庫的引擎有關,比如Mysql的InnoDB引擎。

在Mysql中,數據的基本單位,稱為行?(Row)
管理數據的基本單位,稱為頁?(Page)
保存頁的單位,稱為區?(Extent)

一個區由連續的頁組成,一個頁由連續的行組成
默認每一個區的大小為1M,默認每一頁的大小為16K,所以一個區有1024 / 16 = 64個頁
而每個頁中,根據每行數據的大小,又可以存儲多個行
然而,在InnoDB 1.0版本之后,引入了一個新特性:壓縮頁
被壓縮之后的頁在實際占用空間上,比邏輯上的要小,但是在壓縮和解壓縮時會花費額外的時間
這時如果出現了跨頁檢索數據,效率就會比較低
因此,在表設計時,盡可能的在頁內多存儲數據行,這樣可以減少跨頁檢索,提高效率。
而多存儲數據行就意味著,每一行的列數要盡可能少。


(3) 如何進行垂直分表
如果直接每個表就只存儲一兩列的話
這樣做不僅會造成表過多,而且會產生大量重復字段(比如主鍵),在查詢時還需要不斷地進行多表關聯
所以,如何進行垂直分表還是有技巧的。
一般來說,垂直分表并不會把列平分到2個表中,而是會將一些重要的字段單獨剝離成小表,把剩余的不太重要的字段放在大表中。
比如,把查詢、排序時需要的字段,高頻訪問的小字段放在小表
而把低頻訪問字段以及一些大字段放在大表中

總結

以上是生活随笔為你收集整理的水平分表与垂直分表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。