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

1. 线性hash分区

线性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是根据下面的算法推导:

  1. 发现大于2的数我们称这种价值V下的力量;它可以计算为:

    V = POWER(2, CEILING(LOG(2, num)))

    (假设数字为13)。然后LOG(2,13)是3.7004397181411。CEILING(3.7004397181411)是4,和V =功率(2,4),这是16。)

  2. N = F(column_list) & (V - 1).
  3. N >= num:
  4. Set V = V / 2
  5. Set N = N & (V - 1)

在线性哈希分区的好处是增加,下降,合并,拆分分区可以更快,有利于在处理含有非常大量的数据表(百万兆字节)。缺点是,与常规哈希分区获得的分布相比,分区之间不太可能均匀分布数据.

原文地址:http://blog.51cto.com/a3147972/2092877

时间: 2024-11-29 10:12:39

Mysql 分区介绍(六) —— HASH分区的相关文章

Mysql 分区介绍(二) —— RANGE分区

通过范围的方式进行分区, 为每个分区给出一定的范围, 范围必须是连续的并且不能重复, 使用VALUES LESS THAN操作符<br /> 让我们先来创建一个range分区的表 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

Mysql 分区介绍(三) —— LIST分区

LIST不同于RANGE分区, 每个分区必须被显式的定义, 每个分区是根据列值的成员在一组列表中的元素定义的 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

MySQL 分区介绍

200 ? "200px" : this.width)!important;} --> 介绍 分区是指根据一定的规则将一个大表分解成多个更小的部分,这里的规则一般就是利用分区规则将表进行水平切分:逻辑上没有发生变化但实际上表已经被拆分成了多个物理对象,每个分成被划分成了一个独立的对象.相对于没有分区的当个表而言分区的表有很多的优势包括: 并发统计查询.快速归档删除分区数据.分散存储.查询性能更佳. mysql5.7以后查询语句支持指定分区例如:“ SELECT * FROM t

Mysql 分区介绍(一) ——概述

一.分区类型 1. RANGE类型(范围分区) 通过范围的方式进行分区, 为每个分区给出一定的范围, 范围必须是连续的并且不能重复, 使用VALUES LESS THAN操作符 啥意思呢? 就是range类型就是一种范围, 比如, 从1-10, 11-20, 21-30这种的方式分区, 1-10就在一个分区里, 11-20是另外一个分区, 但是看起来他们还是同一个表 <br /> 咱们看一个创建的例子 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `ui

MySQL基于时间字段进行分区的方案总结

MySQL支持的分区类型一共有四种:RANGE,LIST,HASH,KEY.其中,RANGE又可分为原生RANGE和RANGE COLUMNS,LIST分为原生LIST和LIST COLUMNS,HASH分为原生HASH和LINEAR HASH,KEY包含原生KEY和LINEAR HASH.关于这些分区之间的差别,改日另写文章进行阐述. 最近,碰到一个需求,要对表的时间字段(类型:datetime)基于天进行分区.于是遍历MySQL官方文档分区章节,总结如下: 实现方式 主要是以下几种: 1.

mysql表分区(摘自 MySQL表的四种分区类型)

一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然也可根据其他的条件分区. 二.为什么要对表进行分区为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率. 分区的一些优点包括: 与单个磁盘或文件系统分区相比,可以存储更多的数据.对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据.相

MySQL表的四种分区类型

MySQL表的四种分区类型 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然也可根据其他的条件分区. 二.为什么要对表进行分区 为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率. 分区的一些优点包括: 与单个磁盘或文件系统分区相比,可以存储更多的数据. 对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有

hash 分区

上次参加oracle的培训,老师讲到了利用10g智能分区匹配可以极大地提高两个分区表的连接速度,对于这两个分区的要求就是必须采用相同的分区策略,最简单的实现就是两个分区表都采用HASH分区,并且HASH分区的分区数也必须是相同的.老师还提到对于HASH分区来说,分区的数量最好是2的幂,这样的效率会高一些.[@[email protected]] 至于为什么分区的数量最好是2的幂这个问题,我一直也没有思考,就当个经验记下来了.前两天看一位大牛的BLOG也提到HASH分区的事情,仔细阅读之后才明白.

Oracle 表分区介绍与使用

什么是表分区 分区表是将大表的数据分成称为分区的许多小的子集,类型有FAT32,NTFST32,NTFS.另外,分区表的种类划分主要有:range,list,和hash分区.划分依据主要是根据其表内部属性.同时,分区表可以创建其独特的分区索引.倘若硬盘丢失了分区表,数据就无法按顺序读取和写入,导致无法操作. 为什么要使用表分区以及什么情况下使用 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区.表进行分区后,逻辑上表仍然是一张完整的表,只是将表中