すべてのプロダクト
Search
ドキュメントセンター

PolarDB:インデックスの作成 (自動モード)

最終更新日:May 27, 2024

PolarDB-Xでは、ローカルインデックスとグローバルセカンダリインデックス (GSI) を作成し、これらのタイプのインデックスを削除できます。 この構文は、AUTOモードのデータベースにのみ適用できます。

ローカルインデックス

ローカルインデックスの詳細については、「CREATE INDEXステートメント」をご参照ください。

使用上の注意

GSIでレベル2パーティションに関連する機能を使用する場合、PolarDB-Xインスタンスのバージョンは5.4.17-16952556以降です。

GSI

GSIの基本原則の詳細については、「GSI」をご参照ください。

構文

CREATE [ユニーク]
    グローバルインデックスindex_name [index_type]    
    ON tbl_name (index_sharding_col_name,...)    
    global_secondary_index_option 
    [index_option] 
    [algorithm_option | lock_option] ...
# 構文はGSIにのみ適用されます。 詳細については、CREATE TABLEステートメントのドキュメントを参照してください。  
global_secondary_index_option:   
    [COVERING (col_name,...)]
    [partition_options]
    [VISIBLE | INVISIBLE]

# パーティションを指定します。
partition_options:
partition_columns_definition
[subpartition_columns_definition]
[subpartition_specs_definition]/* テンプレート化されたレベル2パーティションを指定します。* / 
  partition_specs_definition

# レベル1パーティションのパーティションキー列を指定します。
partition_columns_definition:
パーティー
          HASH({column_name | partition_func(column_name)}) partitions_count
        | KEY(column_list) partitions_count
        | RANGE({column_name | partition_func(column_name)}) 
        | RANGE COLUMNS(column_list)
        | LIST({column_name | partition_func(column_name)}) 
        | リストコラム (column_list)

# レベル2パーティションのパーティションキー列を指定します。
subpartition_columns_definition:
サブパーティー
          HASH({column_name | partition_func(column_name)}) subpartitions_count
        | KEY(column_list) subpartitions_count
        | RANGE({column_name | partition_func(column_name)}) 
        | RANGE COLUMNS(column_list)
        | LIST({column_name | partition_func(column_name)})
        | リストコラム (column_list)

partitions_count:
   パーティションpartition_count

subpartitions_count:
   サブパーツpartition_count

# パーティション関数を指定します。
partition_func:
    YEAR
  | TO_DAYS
  | TO_MONTHS
  | TO_WEEKS
  | TO_SECOND
  | UNIX_TIMESTAMP
  | 月
  | DAYOFWEEK
  | DAYOFMONTH
  | DAYOFYEAR
  | SUBSTR
  | SUBSTRING


#3種類のレベル1パーティションを指定します。
partition_specs_definition:
hash_partition_list
  | range_partition_list
  | list_partition_list

#3種類のレベル2パーティションを指定します。
subpartition_specs_definition:
hash_subpartition_list
  | range_subpartition_list
  | list_subpartition_list

# レベル1パーティションのHASHまたはKEYサブパーティションを指定します。
hash_partition_list:
/* レベル1パーティション内のすべてのサブパーティションは、HASHパーティショニングタイプです。* /
| ( hash_partition [, hash_partition, ...] )

hash_partition:
    PARTITION partition_name [partition_spec_options] /* 純粋なレベル1パーティションまたはテンプレート付きサブパーティションを指定します。* /
  | PARTITION partition_name subpartitions_count [subpartition_specs_definition] /* レベル1パーティションの下にテンプレート化されていないサブパーティションを指定します。* /

# レベル2パーティションのHASHまたはKEYサブパーティションを指定します。
hash_subpartition_list:
  | 空
  | ( hash_subpartition [, hash_subpartition, ...] )

hash_subpartition:
SUBPARTITION subpartition_name [partition_spec_options]

# レベル1パーティションのRANGEまたはRANGE COLUMNSサブパーティションを指定します。
range_partition_list:
    (range_partition [, range_partition, ... ] )

range_partition:
    	PARTITION partition_name VALUES LESS THAN (range_bound_value) [partition_spec_options] /* 純粋なレベル1パーティションまたはテンプレートサブパーティションを指定します。* /
    | PARTITION partition_name VALUES LESS THAN (range_bound_value) [[subpartitions_count] [subpartition_specs_definition]] /* レベル1パーティションの下にテンプレート化されていないサブパーティションを指定します。* /
   
# レベル2パーティションのRANGEまたはRANGE COLUMNSサブパーティションを指定します。
range_subpartition_list:
(range_subpartition [, range_subpartition, ... ] )

range_subpartition:
    SUBPARTITION subpartition_name VALUES LESS THAN (range_bound_value) [partition_spec_options]
  
range_bound_value:
maxvalue /* RANGEパーティションの最大数を指定します。* /
| expr /* 単一のパーティションキー列の範囲境界値を指定します。* /
| value_list /* 複数のパーティションキー列の範囲境界値を指定します。* /

# レベル1パーティションのLISTまたはLIST COLUMNSサブパーティションを指定します。
list_partition_list:
    (list_partition [, list_partition ...])

list_partition:
    	PARTITION partition_name VALUES LESS THAN (range_bound_value) [partition_spec_options] /* 純粋なレベル1パーティションまたはテンプレートサブパーティションを指定します。* /
    | PARTITION partition_name VALUES IN (list_bound_value) [[subpartitions_count] [subpartition_specs_definition]] /* レベル1パーティションの下にテンプレート化されていないサブパーティションを指定します。* /

# レベル2パーティションのLISTまたはLIST COLUMNSサブパーティションを指定します。
list_subpartition_list:
(list_subpartition [, list_subpartition ...])

list_subpartition:
SUBPARTITION subpartition_name VALUES IN (list_bound_value) [partition_spec_options]

list_bound_value:
default /* デフォルトのLISTパーティションを指定します。* /
| value_set

value_set:
value_list /* 単一のパーティションキー列の値のセットを指定します。* /
| (value_list) [, (value_list), ...] /* 複数のパーティションキー列の値のセットを指定します。* /

value_list:
value [, value, ...]

partition_spec_options:
[[ストレージ] エンジン [=] engine_name]
        [COMMENT [=] 'string']
        [LOCALITY [=] locality_option]

table_option:
 	    [[ストレージ] エンジン [=] engine_name]
        [COMMENT [=] 'string']
        [{CHARSET | キャラクターセット} [=] charset]
        [COLLATE [=] collation]
        [TABLEGROUP [=] table_group_id]
        [LOCALITY [=] locality_option]

locality_option:
    'dn=storage_inst_id_list'
    
storage_inst_id_list:
    storage_inst_id[,storage_inst_id_list]

local_partition_definition:
RANGE (column_name) によるローカルパーティー
    [STARTWITH 'yyyy-MM-dd ']
    インターバルinterval_count [年 | 月 | 日]
    [expire_after_countの後のEXPIRE]
    [事前割り当てpre_allocate_count]
    [PIVOTDATE pivotdate_func]
    [DISABLE SCHEDULE]
    
pivotdate_func:
NOW()
  | DATE_ADD(...)
  | DATE_SUB(...)

CREATE GLOBAL INDEX構文は、テーブルの作成後にGSIを追加するために使用されます。 この構文では、MySQL構文でGLOBALキーワードを導入し、GSIのみを追加できるように指定します。 テーブルが作成された後のGSIの作成にはいくつかの制限があります。 GSIの制限の詳細については、「グローバルセカンダリインデックスの使用方法」をご参照ください。

GSIを定義する句の詳細については、「CREATE TABLE (DRDSモード) 」をご参照ください。

次の例では、テーブルの作成後にGSIを作成する方法について説明します。

# テーブルを作成します。
CREATE TAB_order (
  'id' bigint(11) NOT NULL AUTO_INCREMENT、
  'order_id' varchar(20) DEFAULT NULL、
  'buyer_id 'varchar(20) デフォルトNULL、
  'seller_id 'varchar(20) DEFAULT NULL、
  'order_snapshot' ロングテキストDEFAULT NULL、
  'order_detail' ロングテキストDEFAULT NULL、
  主要なキー ('id') 、
  KEY 'L_i_order ' ('order_id')
) ENGINE=InnoDB DEFAULT CHARSET=ハッシュによるutf8パーティション ('order_id ') パーティション16;
# GSIを作成します。
CREATE GLOBAL INDEX 'g_i_seller 'ON t_order ('seller_id') partition by hash('seller_id') partition 16; 
  • ベーステーブル: 上記の例では、t_orderベーステーブルはパーティションテーブルです。 データは、ハッシュアルゴリズムを用いて分割される。 order_id列は、ハッシュされたパーティションキーとして指定されます。

  • インデックステーブル: 上記の例では、インデックステーブルg_i_sellerはハッシュアルゴリズムを使用して分割されています。 seller_id列は、ハッシュされたパーティションキーとして指定されます。 order_snapshot列はカバー列として指定されます。

  • インデックスを定義する条項: GLOBAL INDEX 'g_i_seller 'ON t_order ('seller_id') partition by hash('seller_id ') partition 16

SHOW INDEXステートメントを実行して、order_id列のローカルインデックスやid列とorder_id列のGSIなどのインデックスを表示します。 seller_idは、インデックステーブルのシャードキーとしても指定されます。 また、idとorder_idはデフォルトのカバー列です。 idもプライマリキーとして指定され、order_idはベーステーブルのシャードキーです。

説明

GSIの制限の詳細については、「グローバルセカンダリインデックスの使用方法」をご参照ください。 SHOW INDEXの詳細については、「SHOW INDEX」をご参照ください。

show index from t_order;

サンプル結果:

----------- -----------------------------------------------------------------------------------------------------------------
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | カーディナリティ | Sub_part | パック | Null | Index_type | コメント | Index_comment |
----------- ------------------------------------------------------------------------------------------------------------------
| t_order_****_00000 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
| t_order_****_00000 | 1 | l_i_order | 1 | order_id | A | 0 | NULL | NULL | YES | BTREE | | |
----------- ------------------------------------------------------------------------------------------------------------------
セットの2列 (0.02秒) 

SHOW GLOBAL INDEXステートメントを実行してGSIを表示します。 詳細については、「SHOW GLOBAL INDEX」をご参照ください。

t_orderからグローバルインデックスを表示し
。+ --------------------- ------------------------------------------------------------- + ---------------- --------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- +---------------
| スキーマ | テーブル | NON_UNIQUE | KEY_NAME | INDEX_NAMES | COVERING_NAMES | INDEX_TYPE | DB_PARTITION_POLICY | DB_PARTITION_POLICY | DB_PARTITION_COUNT | TB_PARTITION_KEY | TB_PARTITION_COUNTIUS
+ --------------------- ------------------------------------------------------------- + ---------------- --------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- +---------------
| ZZY3_DRDS_LOCAL_APP | t_order | 1 | g_i_seller | seller_id | id、order_id | NULL | seller_id | HASH | 4 | | NULL | NULL | PUBLIC |
+ --------------------- -------------------------------------------------------------- + ---------------- --------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- +---------- 

次のステートメントを実行して、インデックステーブルの構造を表示します。 テーブルには、ベーステーブルの主キー、シャードキー、デフォルトのカバーリング列、およびカスタムカバーリング列が含まれます。 主キー列は、AUTO_INCREMENT属性とベーステーブルのローカルインデックスを削除します。

showテーブルを作成g_i_seller;
+ ------------ + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| テーブル | テーブルの作成 |
+ ------------ + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| g_i_seller | CREATE TABLE 'g_i_seller '(
  'id' bigint(11) NOT NULL、
  'order_id' varchar(20) DEFAULT NULL、
  'seller_id 'varchar(20) DEFAULT NULL、
  主要なキー ('id') 、
  KEY 'auto_shard_key_seller_id ' ('seller_id') BTREEを使用
) ENGINE=InnoDB DEFAULT CHARSET=ハッシュによるutf8パーティション ('seller_id') パーティション16 |
+ ------------ + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +