mysql的hash分区_MySQL中的分区(五)HASH分区
HASH分區(qū)主要用來分散熱點(diǎn)讀,取保數(shù)據(jù)在預(yù)先確定個(gè)數(shù)的分區(qū)中盡可能的平均分布。對(duì)一個(gè)表執(zhí)行HASH分區(qū)時(shí),MySQL會(huì)對(duì)分區(qū)鍵應(yīng)用一個(gè)散列函數(shù),一次確定數(shù)據(jù)應(yīng)該放在哪一個(gè)分區(qū)中。
MySQL分區(qū)支持兩種HASH分區(qū),常規(guī)HASH分區(qū)和線性HASH分區(qū)。
常規(guī)HASH使用的是取模算法,線性HASH使用的是線性2的冪運(yùn)算。
CREATE TABLE emp2hash (id INT NOT NULL,
ename VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job VARCHAR(30) NOT NULL,store_id INT NOT NULL )
PARTITION BY HASH (store_id) PARTITIONS 4;
INSERT????INTO emp2hash VALUES (1,'Tom','2010-10-10','9999-12-31','Clerk',234);
EXPLAIN PARTITIONS SELECT * FROM emp2hash WHERE store_id = 234
如果要增加分區(qū)數(shù)量,取模算法是MOD(expr,X+1),原來分區(qū)中的數(shù)據(jù)幾乎都要重新計(jì)算,所以常規(guī)分區(qū)在分區(qū)管理上代價(jià)太大,MySQL提供了線性HASH分區(qū),來降低分區(qū)管理的代價(jià)。Linear hash在分區(qū)維護(hù)(增加,刪除,合并,拆分分區(qū))時(shí),MySQL能夠處理的更加迅速,但是和常規(guī)HASH各分區(qū)之間的數(shù)據(jù)分布不太均衡。
CREATE TABLE emp2linehash(id INT NOT NULL,
ename VARCHAR(20),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job VARCHAR(30) NOT NULL,
store_id INT NOT NULL)
PARTITION BY LINEAR HASH (store_id) PARTITIONS 4;
常規(guī)分區(qū)時(shí),保存數(shù)值A(chǔ)所在的分區(qū),N(A)=MOD(A,num)=A&(num-1)
線性分區(qū)時(shí),找到大于等于num的冪V=Power(2,ceiling(Log(2,num)));N=A&(num-1),僅以A為非負(fù)整數(shù)為例。
總結(jié)
以上是生活随笔為你收集整理的mysql的hash分区_MySQL中的分区(五)HASH分区的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql创建表时显示错误_MYSQL创
- 下一篇: const mysql_mysql –