1. 程式人生 > 其它 >水平分表

水平分表

一、概念

水平分表:是為了解決單表記錄資料過大引起的效率問題,通過HASH、分段等手段拆分,將大表化小的手段。

垂直分表:是將寬表變成幾個窄表的手段,幾個拆分前後的資料記錄數未改變。通過將少量的重要欄位剝離到窄表,讓每個頁容納更多的行,減少跨頁檢索,減小磁碟掃描範圍,達到提高效率的目的。

  1. 何時進行垂直拆分:

1.單表資料總量可能過千萬。
2.欄位超過20個
3.包含超長varchar、text、clob、blob等較佔空間的型別欄位。

  1. 哪些欄位適合放在小表:

1.資料查詢條件、排序用到的欄位:商品id、商戶id、分類編號、品牌編號、邏輯刪除欄位等。
2.高頻訪問的小子段:商品名、子標題、廠家資訊、價格。

  1. 哪些欄位適合放在大表:

1.低頻訪問欄位:配送資訊、售後申明、最後更新時間。
2.大欄位:圖文詳情、圖片Base64、Json元資料(特殊情況下某個大欄位就需要單獨存到一個表)。

二、innodb管理資料的機制:

row -> page(16KB) -> extent(1MB) -> segment -> table_space;

row:行,就是一條記錄。
page:頁,磁碟儲存,固定大小為16KB,根據行資料大不同大小,儲存若干連續的行。
extent:區,固定大小為1MB,也就是一個區只能儲存64個連續的頁。
segment:段。
table_space:表空間。

innodb1.0後提供了壓縮頁的技術,可以讓每頁物理上儲存更多的邏輯資料。跨頁檢索資料時的解壓縮效率不算高,所以做表設計時,要儘量的在一個頁中儲存更多的行資料,來減少跨頁檢索的次數,來提高資料檢索效率。

垂直拆分前:每行佔1KB,需要625萬頁來儲存。
垂直拆分後:每行佔64B,只需要39萬頁來儲存。
查詢時需要檢索的資料頁數相差16倍。

學習使我充實,分享給我快樂!