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」をご参照ください。
。+ --------------------- ------------------------------------------------------------- + ---------------- --------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- +---------------
| スキーマ | テーブル | 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 |
+ ------------ + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +