CREATE INDEXステートメントを使用して、インデックスを作成できます。 PolarDB-Xは、ローカルセカンダリインデックスとグローバルセカンダリインデックスをサポートします。 ビジネス要件に基づいて、ローカルセカンダリインデックスとグローバルセカンダリインデックスを作成または削除できます。 この構文は、DRDSモードのデータベースにのみ適用されます。
ローカルセカンダリインデックスの作成
ローカルセカンダリインデックスの作成方法については、「create indexステートメント」をご参照ください。
グローバルセカンダリインデックスの作成
グローバルセカンダリインデックスの基本情報については、「GSI」をご参照ください。
構文
CREATE [ユニーク]
グローバルインデックスindex_name [index_type]
ON tbl_name (index_sharding_col_name,...)
global_secondary_index_option
[index_option]
[algorithm_option | lock_option] ...
# グローバルセカンダリインデックスの作成に使用される特定の構文。 詳細については、MySQLの公式WebサイトのCREATE TABLEステートメントを参照してください。
global_secondary_index_option:
[COVERING (col_name,...)]
drds_partition_options
[VISIBLE | INVISIBLE]
# データベースシャーディングとテーブルシャーディングに使用される句。 詳細については、MySQLの公式WebサイトのCREATE TABLEステートメントを参照してください。
drds_partition_options:
db_sharding_algorithmによるDBPARTITION
[TBPARTITION BY {table_sharding_algorithm} [TBPARTITIONS num]]
db_sharding_algorithm:
HASH([col_name])
| {YYYYMM | YYYYWEEK | YYYYDD | YYYYMM_OPT | YYYYWEEK_OPT | YYYYDD_OPT}(col_name)
| UNI_HASH(col_name)
| RIGHT_SHIFT(col_name, n)
| RANGE_HASH(col_name, col_name, n)
table_sharding_algorithm:
HASH(col_name)
| {MM | DD | WEEK | MMDD | YYYYMM | YYYYWEEK | YYYYYYWEEK | YYYYMM_OPT | YYYYYYWEEK_OPT | YYYYDD_OPT}(col_name)
| UNI_HASH(col_name)
| RIGHT_SHIFT(col_name, n)
| RANGE_HASH(col_name, col_name, n)
# MySQLデータベースでサポートされているDDL構文。
index_sharding_col_name:
col_name [(length)] [ASC | DESC] # lengthパラメーターは、インデックステーブルのシャードキーに基づいてローカルのセカンダリインデックスを作成する場合にのみ使用できます。
index_option:
KEY_BLOCK_SIZE [=] 値
| index_type
| PARSER parser_name付き
| コメント '文字列'
index_type:
USING {BTREE | ハッシュ}
algorithm_option:
ALGORITHM [=] {デフォルト | INPLACE | コピー}
lock_option:
LOCK [=] {デフォルト | NONE | 共有 | 排他的}
テーブルを作成したら、create GLOBAL INDEX
を使用してグローバルセカンダリインデックスを作成できます。 PolarDB-Xで定義されている構文は、GLOBALキーワードをサポートしています。 GLOBALキーワードを使用して、グローバルセカンダリインデックスとしてインデックスを指定できます。 既存のテーブルのグローバルセカンダリインデックスを作成する前に、グローバルセカンダリインデックスの制限に注意する必要があります。 グローバルセカンダリインデックスの制限と規則の詳細については、「グローバルセカンダリインデックスの使用方法」をご参照ください。
グローバルセカンダリインデックスの作成に使用できる句の詳細については、「create TABLE ( DRDSモード) 」をご参照ください。
例
次の例は、既存のテーブルのグローバルセカンダリインデックスを作成する方法を示しています。
# テーブルを作成します。
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 dbpartition ('order_id');
# グローバルセカンダリインデックスを作成します。
ALTER TABLE t_order ADD UNIQUEグローバルインデックス 'g_i_buyer ' ('buyer_id') カバー ('order_snapshot') dbpartition by hash('buyer_id');
- ベーステーブル: 上記の例では、t_orderという名前のテーブルが各データベースシャードに作成されます。 データは、order_id列に基づくハッシュアルゴリズムを使用してシャードされます。
- インデックステーブル: 上記の例では、データベースシャードごとにg_i_buyerという名前のインデックステーブルが作成されます。 インデックス値は、buyer_id列に基づくハッシュアルゴリズムを使用してシャードされます。 order_snapshot列は、カスタムカバー列として指定されます。
- グローバルセカンダリインデックスを定義する条項:
global index 'g_i_seller 'ON t_order ('seller_id') dbpartition by hash('seller_id')
。
SHOW INDEX
ステートメントを使用して、テーブルのインデックスに関する情報を照会できます。 次の例では、返される情報には、order_idシャードキーに基づいて作成されたローカルセカンダリインデックスと、seller_id、id、およびorder_id列に基づいて作成されたグローバルセカンダリインデックスが含まれます。 インデックステーブルのシャードキーはseller_idです。 idフィールドはベーステーブルの主キーであり、order_idフィールドはベーステーブルのシャードキーです。 id列とorder_id列はデフォルトのカバー列です。 説明 グローバルセカンダリインデックスの制限と規則の詳細については、「グローバルセカンダリインデックスの使用方法」をご参照ください。 SHOW INDEXの詳細については、「SHOW INDEX」をご参照ください。
mysql> t_orderからインデックスを表示します。---------------- ----------------------------------------------------------------------------------------------------------------
| テーブル | NON_UNIQUE | KEY_NAME | SEQ_IN_INDEX | COLUMN_NAME | COLLATION | CARDINALITY | SUB_PART | PACKED | NULL | INDEX_TYPE | COMMENT | INDEX_COMMENT |
---------------- ----------------------------------------------------------------------------------------------------------------
| t_order | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | |
| t_order | 1 | l_i_order | 1 | order_id | A | 0 | NULL | NULL | YES | BTREE | |
| t_order | 1 | g_i_seller | 1 | seller_id | NULL | 0 | NULL | NULL | YES | グローバル | インデックス | |
| t_order | 1 | g_i_seller | 2 | id | NULL | 0 | NULL | NULL | | グローバル | カバー | |
| t_order | 1 | g_i_seller | 3 | order_id | NULL | 0 | NULL | NULL | YES | グローバル | カバー | |
---------------- -----------------------------------------------------------------------------------------------------------------
SHOW GLOBAL INDEX
ステートメントを使用して、テーブルのグローバルセカンダリインデックスに関する情報を照会できます。 詳細については、「SHOW GLOBAL INDEX」をご参照ください。 mysql> 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 |
+ --------------------- -------------------------------------------------------------- + ---------------- --------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- + -------------------- +----------
次のステートメントを使用して、インデックステーブルのスキーマを照会できます。 グローバルセカンダリインデックステーブルには、ベーステーブルのプライマリキー、シャードキー、既定のカバーリング列、およびカスタムカバーリング列が含まれます。 グローバルセカンダリインデックステーブルでは、プライマリキー列は
自動インクリメント
されず、ローカルセカンダリインデックスは含まれません。 mysql> show create table 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 dbpartition ('seller_id') |
+ ------------ + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +