• 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 为非负整数为例。

     

     

     

                    

     

     

     

     

     

     

  • 相关阅读:
    iframe嵌套
    fiddler——一款莱斯的抓包工具
    工程代码规范和更新规范
    新项目新工作空间新仓库新setting文件
    quartz-job实现实时或定时发送短信任务
    quartz-job实现定时任务配置
    quartz开源作业调度框架的配置
    Confluence 6 让一个空间可以公众访问
    Confluence 6 管理和恢复空间管理权限
    Confluence 6 指派和撤销空间权限
  • 原文地址:https://www.cnblogs.com/kate7/p/13390371.html
Copyright © 2020-2023  润新知