`

MySQL 分区表举例

阅读更多
关于MySQL分区表的概念百度上一大堆,这里给出几个例子供参考,基本上一看就懂的。酷
Range类型
须要提供一个数字列作为判断依据
ALTER TABLE log_regist PARTITION BY RANGE (UNIX_TIMESTAMP(event_at))(
PARTITION P201702 VALUES LESS THAN (1485878400) ENGINE = InnoDB,
PARTITION P201703 VALUES LESS THAN (1488297600) ENGINE = InnoDB,
PARTITION P201704 VALUES LESS THAN (1490976000) ENGINE = InnoDB,
PARTITION P201705 VALUES LESS THAN (1493568000) ENGINE = InnoDB,
PARTITION P201706 VALUES LESS THAN (1496246400) ENGINE = InnoDB
)
注意红字必须是线性值,数字、时间戳都成(date需要使用 to_days(DATE)这种形式,5.5以后支持),核心思想就是比较指定列是否在某个区间(分区)内。问题就是分区随着时间推移会不断增加,所以一定要及时增加新的分区否则无法写入数据。另外,参照列必须列为复合主键(比如 PRIMARY KEY (`id`,`create_at`) )。
Hash类型
利用Hash函数获取某列的hash值,然后提供一个正数的分区数量。
ALTER TABLE log_order_finished PARTITION BY HASH(id) PARTITIONS 12;
核心思想就是根据一个HASH值判断指定的分区,与Range不同,这里直接给定了分区数量。话说MySQL分区数量上限是1024,超过了会有奇迹发生,具体参考MySQL5手册或百度。
List类型
List类型必须明确指定范围值,其不同于Range对连续的序列进行判断
假定有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)
);
这段照搬了手册,我不用这种分区方式的理由是不可约定列的内容范围。
Key类型
它们唯一的区别在于使用的关键字是KEY而不是HASH,并且KEY分区只采用一个或多个列名的一个列表
通过线性KEY分割一个表也是可能的。下面是一个简单的例子:
CREATE TABLE tk (
    col1 INT NOT NULL,
    col2 CHAR(5),
    col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;
这段很诡异,手册上说明了是基于MySQL内部的hash方法,类似于password()函数。
删除分区
ALTER TABLE tr DROP PARTITION p2;
增加分区
ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (1960));
for ($i = 1; $i <= 36; $i++) {
$ts = mktime(0, 0, 0, $i + 1, 1);
$p = 'P' . date('Ym', $ts);
$d = date('Y-m-01', $ts);
echo "PARTITION $p VALUES LESS THAN ($ts) ENGINE = InnoDB,", '<br/>';
}
另外,为了方便的生成SQL语句,可以参考以下PHP代码:
function makePartition(){
        echo "ALTER TABLE log_mobi_regist PARTITION BY RANGE (UNIX_TIMESTAMP(event_at)) \r\n<br/>";
        $partitions = [];

        for ($i = 1; $i <= 36; $i++) {
            $ts = mktime(0, 0, 0, $i + 1, 1);
            $p  = 'P' . date('Ym', $ts);
            $d  = date('Y-m-01', $ts);
            $partitions[] = "PARTITION $p VALUES LESS THAN ($ts) ENGINE = InnoDB\r\n".'<br/>';
        }
        echo '(', join(',', $partitions), ')';
}
 此段是我常用于生成日志SQL的代码,仅供参考。
另外可以看看这边分区性能测评的文章会有帮助:http://blog.csdn.net/jhq0113/article/details/44593511
吐槽一句,这个编辑器越来越烂了
1
0
分享到:
评论

相关推荐

    MYSQL分区表测试

    MYSQL分区表测试过程详细说明。MYSQL分区表测试过程详细说明。

    MySQL分区表自动创建及删除存储过程

    用存储过程实现了MySQL数据库分区表的自动创建和自动删除功能。亲测有效。希望有用。

    互联网公司为啥不使用mysql分区表

    互联网公司为啥不使用mysql分区表

    创建mysql表分区的方法

    表分区的测试使用,主要内容来自于其他博客文章以及mysql5.1的参考手册mysql测试版本:mysql5.5.28mysql物理存储文件(有mysql配置的datadir决定存储路径)格式简介数据库engine为MYISAMfrm表结构文件,myd表数据...

    mysql数据库表分区教程

    mysql数据库表分区教程,详细说明mysql表分区的每一个步骤

    详解MySQL分区表

    本篇文章给大家带来的内容是关于MySQL中分区表的介绍及使用场景,有需要的朋友可以参考一下,希望对你有所帮助。 1.分区的目的及分区类型 MySQL在创建表的时候可以通过使用PARTITION BY子句定义每个分区存放的数据。...

    mysql表分区

    mysql表分区策略,包含range分区、list分区、hash分区等方法介绍及详解

    生产中使用和管理MySQL分区表

    分库什么的,如果是垂直的话,dba 没法一个人搞的,肯定要和研发的做下来谈的。水平可以自己搞!

    mysql分区表管理(完整版)

    数据库分区是一种物理数据库设计技术。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减sql语句的响应时间,同时对于...MYSQL的分区主要有两种形式:水平分区和垂直分区。

    MySQL分区表的局限和限制详解

    禁止构建 分区表达式不支持以下几种构建: 存储过程,存储函数,UDFS或者...在MySQL 5.7.1之前的分区表不支持HANDLER语句,以后的版本取消了这一限制。 服务器SQL模式 如果要用用户自定义分区的表的话,需要注意的是

    MySQL分区表的最佳实践指南

    主要给大家介绍了关于MySQL分区表的最佳实践指南,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    Mysql分区表的管理与维护

    改变一个表的分区方案只需使用alter table 加 partition_options 子句就可以了。这篇文章主要介绍了Mysql分区表的管理与维护,非常不错,感兴趣的朋友一起学习吧,需要的朋友可以参考下

    MySQL分区分表方案实践手册

    MySQL分区分表方案实践手册

    MySQL 5.5.8 分区表性能测试

    测试结果 博文链接:https://hawthorstein.iteye.com/blog/888755

    MySQL常用函数的举例及例子

    MySQL函数举例常用函数的分类等,列举出常用函数的种类和用法,规范的举例,使您学习更轻松

    mysql 数据库表分区

    php for mysql的表分区类,为mysql的大数据查询提供分区支持. 该类包含追加 创建 删除分区方法.可以通过索引 分类等字段为条件对数据库物理文件分离. 数据表的查询不受任何影响

    mysql 实现定时给表追加分区

    实现mysql 每天定时自动给数据库表追加分区,包含存储计划和存储过程

    86以MySQL单表查询来举例,看看执行计划包含哪些内容(1)?.pdf

    86以MySQL单表查询来举例,看看执行计划包含哪些内容(1)?.pdf

Global site tag (gtag.js) - Google Analytics