千家信息网

什么是Mysql中RANGE分区

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,下面讲讲关于什么是Mysql中RANGE分区,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完什么是Mysql中RANGE分区这篇文章你一定会有所受益。通过范围的方式进行分区
千家信息网最后更新 2025年02月03日什么是Mysql中RANGE分区

下面讲讲关于什么是Mysql中RANGE分区,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完什么是Mysql中RANGE分区这篇文章你一定会有所受益。

通过范围的方式进行分区, 为每个分区给出一定的范围, 范围必须是连续的并且不能重复, 使用VALUES LESS THAN操作符

让我们先来创建一个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 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 (21));

store_id 小于6的, 会被放入第一个分区, 小于11的会放入第二个分区。

如果我的store_id大于21怎么办呢?, 所以我们得修改一下这个创建分区的方式。

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 (21),    PARTITION p4 VALUES LESS THAN (MAXVALUE));

增加了一个MAXVALUE, MAXVALUE的意思是, 大于21的数据都会放入这个分区, 当然, 还有另外一种方式去避免这个问题, 就是在INSERT的时候增加IGNORE关键字。

分区键类型为时间转时间戳

可以使用UNIX-TIMESTAMP()

CREATE TABLE quarterly_report_status (    report_id INT NOT NULL,    report_status VARCHAR(20) NOT NULL,    report_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)PARTITION BY RANGE ( UNIX_TIMESTAMP(report_updated) ) (    PARTITION p0 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-01 00:00:00') ),    PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-04-01 00:00:00') ),    PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-07-01 00:00:00') ),    PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-10-01 00:00:00') ),    PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-01-01 00:00:00') ),    PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-04-01 00:00:00') ),    PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-07-01 00:00:00') ),    PARTITION p7 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-10-01 00:00:00') ),    PARTITION p8 VALUES LESS THAN ( UNIX_TIMESTAMP('2010-01-01 00:00:00') ),    PARTITION p9 VALUES LESS THAN (MAXVALUE));

除了UNIX_TIMESTAMP外,其他涉及到时间戳的表达式都是不被允许的

基于时间数字的分区

CREATE TABLE members (    firstname VARCHAR(25) NOT NULL,    lastname VARCHAR(25) NOT NULL,    username VARCHAR(16) NOT NULL,    email VARCHAR(35),    joined DATE NOT NULL)PARTITION BY RANGE(YEAR(joined) ) (    PARTITION p0 VALUES LESS THAN (1960),    PARTITION p1 VALUES LESS THAN (1970),    PARTITION p2 VALUES LESS THAN (1980),    PARTITION p3 VALUES LESS THAN (1990),    PARTITION p4 VALUES LESS THAN MAXVALUE);

对于以上什么是Mysql中RANGE分区相关内容,大家还有什么不明白的地方吗?或者想要了解更多相关,可以继续关注我们的行业资讯板块。

0