日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

創(chuàng)建INTERVAL RANGE分區(qū)

本文介紹了創(chuàng)建INTERVAL RANGE分區(qū)的語法。

前提條件

集群版本需為PolarDB MySQL版8.0.2版本且Revision version為8.0.2.2.0及以上。您可以通過查詢版本號確認集群版本。

語法

CREATE TABLE [IF NOT EXISTS] [schema.]table_name
    table_definition
    partition_options;

其中,partition_options為:

PARTITION BY
    { RANGE{(expr) | COLUMNS(column_list)} }
    { INTERVAL(type, expr) | INTERVAL(expr) }
    [(partition_definition [, partition_definition] ...)]

partition_definition為:

    PARTITION partition_name
        [VALUES LESS THAN {expr | MAXVALUE}]
        [[STORAGE] ENGINE [=] engine_name]
        [COMMENT [=] 'string' ]
        [DATA DIRECTORY [=] 'data_dir']
        [INDEX DIRECTORY [=] 'index_dir']
        [MAX_ROWS [=] max_number_of_rows]
        [MIN_ROWS [=] min_number_of_rows]
        [TABLESPACE [=] tablespace_name]

其中,INTERVAL子句僅支持設(shè)置間隔數(shù)值(expr)和間隔類型(type)。

參數(shù)

參數(shù)

參數(shù)說明

table_name

要創(chuàng)建的表名稱。

RANGE(expr)

RANGE分區(qū)字段表達式,目前只支持INT類型,不支持字符類型。

column_list

RANGE COLUMNS的情況下使用,分區(qū)字段列表,不支持表達式。

INTERVAL(type)

目前支持8種時間類型(YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND),不顯式指定默認是數(shù)字類型的間隔。

INTERVAL(expr)

指定間隔的數(shù)值大小。當(dāng)type為SECOND類型時,間隔不能小于60。

MAXVALUE

最大值。

engine_name

存儲引擎名稱。

  • 間隔數(shù)值(expr)

    相近的1000個數(shù)字進入同一個分區(qū),示例如下:

    INTERVAL(1000)
  • 時間類型

    • 年(YEAR)

      以年為單位設(shè)置自動分區(qū)的間隔,每一年的數(shù)據(jù)進入同一個分區(qū),示例如下:

      INTERVAL(YEAR, 1)
    • 季度(QUARTER)

      以季度為單位設(shè)置自動分區(qū)的間隔,每一季度的數(shù)據(jù)進入同一個分區(qū),示例如下:

      INTERVAL(QUARTER, 1)
    • 月(MONTH)

      以月為單位設(shè)置自動分區(qū)的間隔,每一月的數(shù)據(jù)進入同一個分區(qū),示例如下:

      INTERVAL(MONTH, 1)
    • 周(WEEK)

      以周為單位設(shè)置自動分區(qū)的間隔,每一周的數(shù)據(jù)進入同一個分區(qū),示例如下:

      INTERVAL(WEEK, 1)
    • 日(DAY)

      以日為單位設(shè)置自動分區(qū)的間隔,每一日的數(shù)據(jù)進入同一個分區(qū),示例如下:

      INTERVAL(DAY, 1)
    • 時(HOUR)

      以小時為單位設(shè)置自動分區(qū)的間隔,每一小時的數(shù)據(jù)進入同一個分區(qū),示例如下:

      INTERVAL(HOUR, 1)
    • 分(MINUTE)

      以分鐘為單位設(shè)置自動分區(qū)的間隔,每一分鐘的數(shù)據(jù)進入同一個分區(qū),示例如下:

      INTERVAL(MINUTE, 1)
    • 秒(SECOND)

      以秒為單位設(shè)置自動分區(qū)的間隔,每60秒的數(shù)據(jù)進入同一個分區(qū),示例如下:

      INTERVAL(SECOND, 60)

示例

以下示例將order_time作為分區(qū)鍵,按間隔劃分sales表。創(chuàng)建INTERVAL RANGE分區(qū)表需要有一個初始的轉(zhuǎn)換點,然后才能在轉(zhuǎn)換點之外自動創(chuàng)建新的分區(qū)。

在數(shù)據(jù)庫中創(chuàng)建一個新的INTERVAL RANGE分區(qū)表,并向表中插入數(shù)據(jù),示例如下:

CREATE TABLE sales
(
  id BIGINT,
  uid BIGINT,
  order_time DATETIME
)
PARTITION BY RANGE COLUMNS(order_time) INTERVAL(MONTH, 1)
(
  PARTITION p0 VALUES LESS THAN('2021-9-1')
);

向INTERVAL RANGE分區(qū)表中插入數(shù)據(jù)。示例如下:

INSERT INTO sales VALUES(1, 1010101010, '2021-11-11');

插入數(shù)據(jù)后,SHOW CREATE TABLE查詢sales表定義。新的表定義如下:

CREATE TABLE `sales` (
  `id` bigint(20) DEFAULT NULL,
  `uid` bigint(20) DEFAULT NULL,
  `order_time` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50500 PARTITION BY RANGE  COLUMNS(order_time) */ /*!99990 800020200 INTERVAL(MONTH, 1) */
/*!50500 (PARTITION p0 VALUES LESS THAN ('2021-9-1') ENGINE = InnoDB,
 PARTITION _p20211001000000 VALUES LESS THAN ('2021-10-01 00:00:00') ENGINE = InnoDB,
 PARTITION _p20211101000000 VALUES LESS THAN ('2021-11-01 00:00:00') ENGINE = InnoDB,
 PARTITION _p20211201000000 VALUES LESS THAN ('2021-12-01 00:00:00') ENGINE = InnoDB) */

通過上述示例發(fā)現(xiàn)INTERVAL RANGE分區(qū)自動新增加了_p20211001000000、_p20211101000000、_p20211201000000三個分區(qū),這里要注意‘_p’作為前綴的分區(qū)名將會保留為系統(tǒng)命名規(guī)則,手動管理分區(qū)(創(chuàng)建新分區(qū)或者重命名分區(qū)的操作)時,將不允許使用此類型的分區(qū)名。例如,ADD PARTITIONREORGANIZE PARTITION操作將不允許使用‘_p’作為前綴的分區(qū)名;但是DROP PARTITION操作可以使用‘_p’作為前綴的分區(qū)名。

在上述業(yè)務(wù)場景下,此前通常需要DBA在插入值觸及轉(zhuǎn)換點之前手動增加分區(qū),稍有疏忽就有可能導(dǎo)致新的數(shù)據(jù)插入失敗。通過創(chuàng)建INTERVAL RANGE分區(qū)表,可以由系統(tǒng)自動增加分區(qū),避免數(shù)據(jù)不能及時插入。

由于分區(qū)數(shù)量最多只能達到8192,自動增加分區(qū)的數(shù)量也會受限制。因此建議您配合分區(qū)表的生命周期管理解決方案使用,定期增加分區(qū),同時定期將冷數(shù)據(jù)所在的分區(qū)自動遷移到OSS上。

更多示例如下:

/* 設(shè)定間隔為數(shù)字類型,大小為1000 */
CREATE TABLE t(a int, b datetime)
PARTITION BY RANGE(a) INTERVAL(1000) (
    PARTITION p0 VALUES LESS THAN(1000)
);

/* 由于partition expression只能是INT_RESULT,所以不需要顯式指定type,設(shè)定大小即可 */
CREATE TABLE t(a int, b datetime)
PARTITION BY RANGE(MONTH(b)) INTERVAL(1) (
    PARTITION p0 VALUES LESS THAN(2)
);

/* 由于分區(qū)鍵不是時間類型,設(shè)定間隔為數(shù)字類型,大小為1000 */
CREATE TABLE t(a int, b datetime)
PARTITION BY RANGE COLUMNS(a) INTERVAL(1000) (
    PARTITION p0 VALUES LESS THAN(1000)
);

/* 設(shè)定間隔為1年 */
CREATE TABLE t(a int, b datetime)
PARTITION BY RANGE COLUMNS(b) INTERVAL(YEAR, 1) (
    PARTITION p0 VALUES LESS THAN('2021-11-01 00:00:00')
);