史上最簡單 MySQL 分割槽

2021-08-30 15:26:00 字數 2751 閱讀 3870

通俗地講表分割槽是將一大表,根據條件分割成若干個小表。

mysql5.1開始支援資料表分割槽了。

為了改善大型表以及具有各種訪問模式的表的可伸縮性,可管理性和提高資料庫效率。
1、單個磁碟或檔案系統分割槽相比,可以儲存更多的資料。

2、提高資料管理性,對於那些已經失去儲存意義的資料,通常可以通過刪除與那些資料有關的分割槽,很容易地刪除那些資料。

相反地,在某些情況下,新增新資料的過程又可以通過為那些新資料專門增加乙個新的分割槽,來很方便地實現。

3、提高查詢效率,這主要是借助於滿足乙個給定where語句的資料可以只儲存在乙個或多個分區內,

這樣在查詢時就不用查詢其他剩餘的分割槽。因為分割槽可以在建立了分割槽表後進行修改,

所以在第一次配置分割槽方案時還不曾這麼做時,可以重新組織資料,來提高那些常用查詢的效率。

4、通過跨多個磁碟來分散資料查詢,來獲得更大的查詢吞吐量。

1、range 分割槽:

基於屬於乙個給定連續區間的列值,把多行分配給分割槽。

2、list 分割槽:

類似於按 range 分割槽,區別在於 list 分割槽是基於列值匹配乙個離散值集合中的某個值來進行選擇。

3、hash 分割槽:

基於使用者定義的表示式的返回值來進行選擇的分割槽,該表示式使用將要插入到表中的這些行的列值進行計算。

這個函式可以包含 mysql 中有效的、產生非負整數值的任何表示式。

4、key 分割槽:

類似於按 hash 分割槽,區別在於 key 分割槽只支援計算一列或多列,且 mysql 伺服器提供其自身的雜湊函式。

必須有一列或多列包含整數值。

1、range 分割槽:

基於屬於乙個給定連續區間的列值,把多行分配給分割槽。

這些區間要連續且不能相互重疊,使用 values less than 操作符來進行定義。

1、整數值分割槽:

partition by range (欄位名) (

partition 分割槽名 values less than (整數值),

partition 分割槽名 values less than (11),

partition 分割槽名 values less than maxvalue # 表示最大的可能的整數值

);2、按日期分割槽:

partition by range (year (欄位名)) ( # year() 日期-年

partition 分割槽名 values less than (年),

partition 分割槽名 values less than (1996),

partition 分割槽名 values less than maxvalue

);

2、list 分割槽:

類似於按 range 分割槽,區別在於 list 分割槽是基於列值匹配乙個離散值集合中的某個值來進行選擇。

list 分割槽通過使用 「partition by list(expr)」 來實現,其中 「expr」 是某列值或乙個基於某個列值、並返回乙個整數值的表示式,然後通過 「values in (value_list)」 的方式來定義每個分割槽,其中 「value_list」 是乙個通過逗號分隔的整數列表。 注:在mysql 5.1中,當使用 list 分割槽時,有可能只能匹配整數列表。

partition by list (欄位名)

partition 分割槽名 values in (值, 值, ...),

partition 分割槽名 values in (1, 3, 5, 100),

partition 分割槽名 values in (7, 8, 10)

);

3、hash 分割槽:

基於使用者定義的表示式的返回值來進行選擇的分割槽,該表示式使用將要插入到表中的這些行的列值進行計算。這個函式可以包含 mysql 中有效的、產生非負整數值的任何表示式。

要使用 hash 分割槽來分割乙個表,要在 create table 語句上新增乙個 「partition by hash (expr)」 子句,其中 「expr」 是乙個返回乙個整數的表示式。它可以僅僅是字段型別為 mysql 整型的一列的名字。此外,你很可能需要在後面再新增乙個 「partitions num」 子句,其中 num 是乙個非負的整數,它表示表將要被分割成分區的數量。

1、hash:

partition by hash (欄位名)

partitions 4; # partitions 值;

2、liner hash:

partition by linear hash(year(字段)) # year() 日期-年

partitions 4; # partitions 值;

4、ksy 分割槽:

類似於按 hash 分割槽,區別在於 key 分割槽只支援計算一列或多列,且 mysql 伺服器提供其自身的雜湊函式。必須有一列或多列包含整數值。

partition by linear key (欄位名)

partitions 3; # partitions 值;

在key分割槽中使用關鍵字linear和在hash分割槽中使用具有同樣的作用,分割槽的編號是通過2的冪(powers-of-two)演算法得到,而不是通過模數演算法。

alter table 表名 drop partition 分割槽名;

史上最簡單的 MySQL 教程(十七) 索引

索引 系統根據某種演算法,將已有的資料 未來可能新增的資料 單獨建立乙個檔案,這個檔案能夠實現快速匹配資料,並且能夠快速的找到對應的記錄,幾乎所有的索引都是建立在字段之上的。索引的意義 但是增加索引是有前提條件的,這是因為索引本身會產生索引檔案 有的時候可能會比資料本身都大 因此非常耗費磁碟空間。m...

史上最簡單的 MySQL 教程(三十七)

基礎概念 為什麼要進行資料的備份與還原?資料備份與還原的方式有很多種,具體可以分為 資料表備份 單錶資料備份 sql備份和增量備份。sql 備份,備份的是 sql 語句。在進行 sql 備份的時候,系統會對錶結構以及資料進行處理,變成相應的 sql 語句,然後執行備份。在還原的時候,只要執行備份的 ...

史上最簡單的 MySQL 教程(十七) 索引

索引 系統根據某種演算法,將已有的資料 未來可能新增的資料 單獨建立乙個檔案,這個檔案能夠實現快速匹配資料,並且能夠快速的找到對應的記錄,幾乎所有的索引都是建立在字段之上的。索引的意義 提公升查詢資料的效率 約束資料的有效性。但是增加索引是有前提條件的,這是因為索引本身會產生索引檔案 有的時候可能會...