全部產品
Search
文件中心

PolarDB:建立部分索引

更新時間:Nov 07, 2024

您可以在建立分區表的同時建立部分索引在已建立好的分區表上建立部分索引

建立分區表的同時建立部分索引

文法

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name
    [(create_definition,...)]
    [table_options]
    partition_options
     ...

其中,create_definition為:

{
    col_name column_definition
  | {INDEX | KEY} [index_name] [index_type] (key_part,...)
      [index_option] [partial_partition_option]
      ...
}

partial_partition_option為:

([PARTITION partition_name0[(SUBPARTITION subpartition_name0[, ...])]][,...]
 )

文法中的其他參數詳情請參見CREATE TABLE

參數說明

參數

說明

table_name

表名。

col_name

列名。

partition_name0

一級分區名稱。

說明

您可以設定多個一級分區,多個分區名稱之間使用英文逗號(,)分隔。

subpartition_name0

二級分區名稱。

說明

您可以設定多個二級分區,多個分區名稱之間使用英文逗號(,)分隔。

樣本

  • 在一級分區上建立部分索引。

    建立分區表orders,在12月的orders_202212分區上建立部分索引o_ind_dp(dept_no, part_no),而在其他歷史分區上建立部分索引o_ind_amout(amount, order_id)

    CREATE TABLE orders
    (
      order_id    INT,
      dept_no     INT,
      part_no     INT,
      country     varchar(20),
      date        DATE,
      amount      INT,
      Primary Key(order_id),
      KEY o_ind_dp(dept_no, part_no) (partition orders_202212),
      KEY o_ind_amout(amount, order_id) 
       (partition orders_202201,
        partition orders_202202,
        partition orders_202203,
        partition orders_202204,
        partition orders_202205,
        partition orders_202206,
        partition orders_202207,
        partition orders_202208,
        partition orders_202209,
        partition orders_202210,
        partition orders_202211
       )
    )
    PARTITION BY RANGE(month(date))
    (
      PARTITION orders_202201 VALUES LESS THAN(2),
      PARTITION orders_202202 VALUES LESS THAN(3),
      PARTITION orders_202203 VALUES LESS THAN(4),
      PARTITION orders_202204 VALUES LESS THAN(5),
      PARTITION orders_202205 VALUES LESS THAN(6),
      PARTITION orders_202206 VALUES LESS THAN(7),
      PARTITION orders_202207 VALUES LESS THAN(8),
      PARTITION orders_202208 VALUES LESS THAN(9),
      PARTITION orders_202209 VALUES LESS THAN(10),
      PARTITION orders_202210 VALUES LESS THAN(11),
      PARTITION orders_202211 VALUES LESS THAN(12),
      PARTITION orders_202212 VALUES LESS THAN(13)
    );
  • 在二級分區上建立部分索引。

    建立LIST-RANGE類型的二級分區表tenants,在p0的所有二級分區以及p1p1_1p1_2p1_3分區上建立部分索引ind_id,在p0p0_1p0_2分區以及p1p1_1p1_2分區上建立部分索引ind_date

    CREATE TABLE tenants (
      id INT,
      date DATE,
      count INT,
      KEY ind_id (id)  (
        partition p0, 
        partition p1 (subpartition p1_1, subpartition p1_2, subpartition p1_3)
      ), 
      KEY ind_date (date) (
        partition p0 (subpartition p0_1,  subpartition p0_2),
        partition p1 (subpartition p1_1, subpartition p1_2)
      )
    ) PARTITION BY LIST COLUMNS(id)
      SUBPARTITION BY RANGE (month(date))(
      PARTITION p0 VALUES IN (1, 2, 3, 4, 5) (
        SUBPARTITION p0_1 VALUES LESS THAN(4),
        SUBPARTITION p0_2 VALUES LESS THAN(7),
        SUBPARTITION p0_3 VALUES LESS THAN(10),
        SUBPARTITION p0_4 VALUES LESS THAN(13)
      ),
      PARTITION p1 VALUES IN (11, 12, 13, 14, 15) (
        SUBPARTITION p1_1 VALUES LESS THAN(4),
        SUBPARTITION p1_2 VALUES LESS THAN(7),
        SUBPARTITION p1_3 VALUES LESS THAN(10),
        SUBPARTITION p1_4 VALUES LESS THAN(13)
      )
    );

在已建立好的分區表上建立部分索引

文法

CREATE [UNIQUE] INDEX index_name
    [index_type]
    ON table_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option |partial_partition_option] ...

其中,partial_partition_option為:

([PARTITION partition_name0[(SUBPARTITION subpartition_name0[, ...])]][,...]
  )

文法中的其他參數詳情請參見CREATE INDEX

參數說明

參數

說明

index_name

索引名稱。

table_name

表名。

partition_name0

一級分區名稱。

說明

您可以設定多個一級分區,多個分區名稱之間使用英文逗號(,)分隔。

subpartition_name0

二級分區名稱。

說明

您可以設定多個二級分區,多個分區名稱之間使用英文逗號(,)分隔。

樣本

  • 在一級分區上建立部分索引。

    在分區表ordersorders_202201分區上建立部分索引o_part_id

    CREATE INDEX o_part_id ON orders(part_no, order_id) (partition orders_202201);

    您也可以使用ALTER TABLE ADD KEY命令來建立以上樣本中的部分索引。

    ALTER TABLE orders ADD KEY o_part_id(part_no, order_id) (partition orders_202201);
  • 在二級分區上建立部分索引。

    在分區表tenantsp0分區的所有二級分區以及p1分區的二級分區p1_1上建立部分索引ind_count

    CREATE INDEX ind_count ON tenants(count) (partition p0, partition p1 (subpartition p1_1));

    您也可以使用ALTER TABLE ADD KEY命令來建立以上樣本中的部分索引。

    ALTER TABLE tenants ADD KEY ind_count(count) (partition p0, partition p1 (subpartition p1_1));