美文网首页
数据库分区

数据库分区

作者: 粥一样温柔 | 来源:发表于2019-11-09 15:31 被阅读0次

概念

数据库分区是一种物理数据库的设计技术,它的目的是为了在特定SQL操作中减少数据读写的总量以缩减响应时间。
分表并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘、系统或是不同的服务器存储介质中,以提高数据库检索效率,降低数据库频繁IO压力值,实际上还是一张表。
优点:
1.相较于单个文件系统或是硬盘,分区可以储存更多数据;
2.数据管理比较方便,如:要清理或废弃某年的数据,可以直接删除该日期的分区数据即可;
3.精准定位分区查询数据,不需要权标扫描查询,大大提高数据检索效率;
4.可跨多个分区磁盘查询,提高查询吞吐量;
5.在涉及聚合函数查询时,很容易进行数据合并。

分区类型

RANGE分区: 基于属于一个给定连续区间的列值,把多行分配给分区。
LIST分区: 类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
HASH分区: 基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。
KEY分区: 类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

RANGE分区:

基于属于一个给定连续区间的列值,把多行分配给分区。
这些区间要连续且不能相互重叠,使用VALUES LESS THAN操作符来进行定义。

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 NOT NULL,
    store_id INT NOT NULL
)
 
PARTITION BY RANGE (store_id) (
    PARTITION p0 VALUES LESS THAN (6),
    PARTITION p1 VALUES LESS THAN (11),
    PARTITION p2 VALUES LESS THAN (16),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

按照这种分区方案:store_id为1到5工作的雇员相对应的所有行被保存在分区P0中,store_id为6到10的雇员保存在P1中,依次类推。MAXVALUE 表示最大的可能的整数值。

LIST分区:

类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
LIST分区通过使用PARTITION BY LIST(expr)实现,其中expr为某列值或一个基于某个列值、并返回一个整数值的表达式,然后通过VALUES IN (value_list)的方式来定义每个分区,其中value_list是一个通过逗号分隔的整数列表。 注释:在MySQL 5.1中,当使用LIST分区时,有可能只能匹配整数列表。

假定有20个音像店,分布在4个有经销权的地区,如下表所示:

地区      商店ID 号
北区      3, 5, 6, 9, 17
东区      1, 2, 10, 11, 19, 20
西区      4, 12, 13, 14, 18
中心区    7, 8, 15, 16

要按照属于同一个地区商店的行保存在同一个分区中的方式来分割表,可以使用下面的“CREATE TABLE”语句:

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 LIST(store_id) (
    PARTITION pNorth VALUES IN (3,5,6,9,17),
    PARTITION pEast VALUES IN (1,2,10,11,19,20),
    PARTITION pWest VALUES IN (4,12,13,14,18),
    PARTITION pCentral VALUES IN (7,8,15,16)
);

这使得在表中增加或删除指定地区的雇员记录变得更容易;
如:要删除西区商店的数据时,可以使用:

ALTER TABLE employees DROP PARTITION pWest;

来进行删除。它与具有同样作用的DELETE(删除)

 DELETE FROM employees WHERE store_id IN (4,12,13,14,18);

比起来,要有效得多。

HASH分区:

基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。
要使用HASH分区来分割一个表,要在CREATE TABLE 语句上添加一个PARTITION BY HASH (expr)子句,其中expr是一个返回一个整数的表达式。它可以仅仅是字段类型为MySQL整型的一列的名字。此外,你很可能需要在后面再添加一个PARTITIONS num子句,其中num是一个非负的整数,它表示表将要被分割成分区的数量。

    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。

KSY分区:

类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

CREATE TABLE tk (
    col1 INT NOT NULL,
    col2 CHAR(5),
    col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;

在KEY分区中使用关键字LINEAR和在HASH分区中使用具有同样的作用,分区的编号是通过2的幂(powers-of-two)算法得到,而不是通过模数算法。

相关文章

  • [转]MYSQL--表分区、查看,建立,删除

    一、 mysql分区简介 数据库分区 数据库分区是一种物理数据库设计技术。虽然分区技术可以实现很多效果...

  • MySQL数据库分区(Database partition)

    认识数据库分区 数据库分区是一种物理数据库设计技术,DBA和数据库建模人员对其相当熟悉。虽然分区技术可以实现很多效...

  • HIVE 表设计优化2 分区表 动态分区调整

    动态分区调整 关系型数据库中,对分区表Insert数据时候,数据库自动会根据分区字段的值,将数据插入到相应的分区中...

  • 分布式事务解决方案

    分布式理论 当我们的单个数据库的性能产生瓶颈的时候,我们可能会对数据库进行分区,这里所说的分区指的是物理分区,分区...

  • zabbix优化之进阶版

    官网调优 1. 数据库优化 1.设置数据库分区优化,buffer优化,hash优化, 说明:数据库分区优化的优点:...

  • day 4 磁盘分区形式

    生产场景的磁盘分区 普通分区形式 存储服务器(含数据库)的分区方式 门户网站分区方式

  • 数据库的分区:水平分区,垂直分区

    它是一种物理数据库设计技术,MySQL数据库默认使用水平分区。2.1 水平分区:对表的行进行分区,不同分组中物理分...

  • Oracle分区

    分区 Oracle数据库提供对表或索引的分区方法有三种: 范围分区 多个字段 Hash分区(散列分区)在列的取值难...

  • 对MySQL交换分区的实践

    前言 在介绍交换分区之前,我们先了解一下 mysql 分区。 数据库的分区有两种:水平分区和垂直分区。而MySQL...

  • mysql分库分表

    课程内容 mysql分区 水平切分 垂直切分 1. mysql分区 1.1 什么是分区? mysql数据库中的数据...

网友评论

      本文标题:数据库分区

      本文链接:https://www.haomeiwen.com/subject/lkcnbctx.html