MySQL 分區表

1. 什麼是表分區?

  • 表分區,是指根據一定規則,將數據庫中的一張表分解成多個更小的,容易管理的部分。從邏輯上看,只有一張表,但是底層卻是由多個物理分區組成。

2. 表分區與分表的區別

  • 分表:指的是通過一定規則,將一張表分解成多張不同的表。比如將用戶訂單記錄根據時間成多個表。 分表與分區的區別在於:分區從邏輯上來講只有一張表,而分表則是將一張表分解成多張表。

3. 表分區有什麼好處?

  • 分區表的數據可以分佈在不同的物理設備上,從而高效地利用多個硬件設備。
  • 和單個磁盤或者文件系統相比,可以存儲更多數據
  • 優化查詢。在where語句中包含分區條件時,可以只掃描一個或多個分區表來提高查詢效率;涉及sum和count語句時,也可以在多個分區上並行處理,最後彙總結果。
  • 分區表更容易維護。例如:想批量刪除大量數據可以清除整個分區。
  • 可以使用分區表來避免某些特殊的瓶頸,例如InnoDB的單個索引的互斥訪問,ext3問價你係統的inode鎖競爭等。

4. 分區表的限制因素

  • 一個表最多只能有1024個分區
  • MySQL5.1中,分區表達式必須是整數,或者返回整數的表達式。在MySQL5.5中提供了非整數表達式分區的支持。
  • 如果分區字段中有主鍵或者唯一索引的列,那麼多有主鍵列和唯一索引列都必須包含進來。即:分區字段要麼不包含主鍵或者索引列,要麼包含全部主鍵和索引列。
  • 分區表中無法使用外鍵約束
  • MySQL的分區適用於一個表的所有數據和索引,不能只對表數據分區而不對索引分區,也不能只對索引分區而不對錶分區,也不能只對表的一部分數據分區。

5. 如何判斷當前MySQL是否支持分區?

命令:show variables like ‘%partition%’

mysql> show variables like ‘%partition%’;
+——————-+——-+
| Variable_name | Value |
+——————-+——-+
| have_partitioning | YES |
+——————-+——-+
1 row in set (0.00 sec)

have_partintioning 的值爲YES,表示支持分區

6. MySQL支持的分區類型有哪些?

  1. RANGE分區:按照數據的區間範圍分區
  2. LIST分區:按照List中的值分區,與RANGE的區別是,range分區的區間範圍值是連續的。
  3. HASH分區

說明 在MySQL5.1版本中,RANGE,LIST,HASH分區要求分區鍵必須是INT類型,或者通過表達式返回INT類型。但KEY分區的時候,可以使用其他類型的列(BLOB,TEXT類型除外)作爲分區鍵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章