MySQL中的分區(五)HASH分區


HASH分區主要用來分散熱點讀,取保數據在預先確定個數的分區中盡可能的平均分布。 對一個表執行HASH分區時,MySQL會對分區鍵應用一個散列函數,一次確定數據應該放在哪一個分區中。

MySQL分區支持兩種HASH分區,常規HASH分區和線性HASH分區。

常規HASH使用的是取模算法,線性HASH使用的是線性2的冪運算。

 

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

 

如果要增加分區數量,取模算法是MODexprX+1),原來分區中的數據幾乎都要重新計算,所以常規分區在分區管理上代價太大,MySQL提供了線性HASH分區,來降低分區管理的代價。Linear hash 在分區維護(增加,刪除,合並,拆分分區)時,MySQL能夠處理的更加迅速,但是和常規HASH各分區之間的數據分布不太均衡。

 

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;

 

 

常規分區時,保存數值A所在的分區,NA=MOD(A,num)=A&(num-1)

線性分區時,找到大於等於num的冪V=Power2ceilingLog2num)));N=A&num-1),僅以A 為非負整數為例。

 

 

 

                

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM