下文內容主要給大家帶來Mysql 分區之 HASH分區詳解,這里所講到的知識,與書籍略有不同,都是億速云專業技術人員在與用戶接觸過程中,總結出來的,具有一定的經驗分享價值,希望給廣大讀者帶來幫助。
hash分區是使用主鍵去確保數據均勻分布在一個預先確定數字的分區上. 在range 或list分區中. 你必須顯式的指定給出的數據寫入哪個分區或設置一個列值去保存; 在hash分區中. Mysql已經為你準備的. 你只需要指定一個列的值或表達式基于列值去hash和分區的數字在哪個分區表中.
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 HASH(store_id)
PARTITIONS 4;如果不包含PARTITIONS, 那么默認為1個分區

使用日期分區
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 HASH( YEAR(hired) )
PARTITIONS 4;expr 必須是非恒量的數, 非隨機的數, 就是數字是不同的, 但是是可以確定的。
如何確定一條數據的分區呢?先創建一個表
CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE)
PARTITION BY HASH( YEAR(col3) )
PARTITIONS 4;如果你插入一條記錄到T1的col3值為“2005-09-15 ',然后分配其存儲決定如下:
MOD(YEAR('2005-09-01'),4)
= MOD(2005,4)
= 1線性hash分區使用一個線性的2的冪運算法則
REATE 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,分區中的記錄存儲在線性散列使用分區數n在Num的分區,其中n是根據下面的算法推導:
發現大于2的數我們稱這種價值V下的力量;它可以計算為:
V = POWER(2, CEILING(LOG(2, num)))(假設數字為13)。然后LOG(2,13)是3.7004397181411。CEILING(3.7004397181411)是4,和V =功率(2,4),這是16。)
N >= num:
在線性哈希分區的好處是增加,下降,合并,拆分分區可以更快,有利于在處理含有非常大量的數據表(百萬兆字節)。缺點是,與常規哈希分區獲得的分布相比,分區之間不太可能均勻分布數據.
對于以上關于Mysql 分區之 HASH分區詳解,如果大家還有更多需要了解的可以持續關注我們億速云的行業推新,如需獲取專業解答,可在官網聯系售前售后的,希望該文章可給大家帶來一定的知識更新。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。