MySQL 9.0 發行說明
MySQL 也支援線性雜湊,它與常規雜湊的不同之處在於,線性雜湊使用線性二的冪演算法,而常規雜湊則採用雜湊函數值的模數。
在語法上,線性雜湊分割與常規雜湊的唯一區別是在 PARTITION BY 子句中加入 LINEAR 關鍵字,如下所示
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY LINEAR HASH( YEAR(hired) )
PARTITIONS 4;給定一個表達式 expr,當使用線性雜湊時,記錄儲存的分割區是 num 個分割區中的分割區號 N,其中 N 是根據以下演算法推導出來的
找出大於
num的下一個 2 的冪。我們將此值稱為V;它可以計算為V = POWER(2, CEILING(LOG(2, num)))(假設
num為 13。則LOG(2,13)為 3.7004397181411。CEILING(3.7004397181411)為 4,且V=POWER(2,4),即為 16。)設定
N=F(column_list) & (V- 1)。當
N>=num時設定
V=V/ 2設定
N=N& (V- 1)
假設使用線性雜湊分割且具有 6 個分割區的資料表 t1,是使用此陳述式建立的
CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE)
PARTITION BY LINEAR HASH( YEAR(col3) )
PARTITIONS 6;現在假設您想要將兩個具有 col3 欄位值 '2003-04-14' 和 '1998-10-19' 的記錄插入 t1。第一個記錄的分割區號計算方式如下
V = POWER(2, CEILING( LOG(2,6) )) = 8
N = YEAR('2003-04-14') & (8 - 1)
= 2003 & 7
= 3
(3 >= 6 is FALSE: record stored in partition #3)第二個記錄儲存的分割區號計算方式如下所示
V = 8
N = YEAR('1998-10-19') & (8 - 1)
= 1998 & 7
= 6
(6 >= 6 is TRUE: additional step required)
N = 6 & ((8 / 2) - 1)
= 6 & 3
= 2
(2 >= 6 is FALSE: record stored in partition #2)線性雜湊分割的優點是,分割區的加入、刪除、合併和分割速度更快,這在處理包含極大量(數 TB)資料的資料表時可能很有利。缺點是與使用常規雜湊分割獲得的分布相比,資料在分割區之間的分布不太可能均勻。