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

PolarDB:クラスタインデックス

最終更新日:Jun 03, 2024

PolarDB-Xはクラスタ化インデックスをサポートします。 PolarDB-Xは、グローバルセカンダリインデックスのカバー列を自動的に管理し、ベーステーブルからクラスター化インデックスにデータを同期します。 このようにして、ベーステーブルをスキャンする必要なしに、要求されたデータをインデックステーブルから照会することができる。 これにより、リソースのオーバーヘッドを削減できます。 このトピックでは、クラスター化インデックスを作成して使用する方法について説明します。

前提条件

PolarDB-XインスタンスのカーネルバージョンはV5.4.9以降です。

注意

  • クラスター化インデックスは、特殊なタイプのグローバルセカンダリインデックスです。 クラスター化インデックスの操作と制限の詳細については、「GSI」をご参照ください。
  • 既定では、テーブルのクラスター化インデックスの対象となる列には、テーブル内のすべての列が含まれます。 テーブルの列を更新すると、変更は自動的にクラスター化インデックステーブルに同期されます。 これにより、ベーステーブルとクラスター化インデックステーブル間でデータの一貫性が確保されます。
  • ベーステーブルのローカルインデックスも、クラスタ化インデックステーブルに同期されます。

構文

テーブルまたはテーブルのインデックスを作成するときに、インデックスの作成に使用される句にCLUSTEREDキーワードを追加できます。 このように、作成されたインデックスは、テーブルのクラスタ化インデックスです。

  • 次のサンプルコードは、CREATE TABLEステートメントを使用してテーブルとテーブルのクラスター化インデックスを作成する方法を示しています。
    create [SHADOW] table [IF NOT EXISTS] tbl_name
        (create_definition, ...)
        [table_options]
        [drds_partition_options]
    
    create_definition:
        [UNIQUE] CLUSTERED INDEX index_name [index_type] (index_col_name,...)
          [drds_partition_options] 
          [index_option] ... 
    説明 作成するテーブルが主キーをシャードキーとして使用している場合、[drds_partition_options] 句でシャーディングルールを指定する必要はありません。
  • 次のサンプルコードは、CREATE INDEXステートメントを使用してテーブルのクラスター化インデックスを作成する方法を示しています
    。
        CLUSTERED INDEX index_name [index_type]
        ON tbl_name (index_col_name,...)
        [drds_partition_options]
        [index_option] ... 
    説明 インデックスを作成するテーブルが主キーをシャードキーとして使用している場合、[drds_partition_options] 句でシャーディングルールを指定する必要はありません。
  • 次のサンプルコードは、ALTER TABLEステートメントを使用してテーブルのクラスター化インデックスを作成する方法を示しています
    。
        alter_仕様 
    次のサンプルコードは、alter_specification句を指定する方法を示しています。
    
      | ADD [UNIQUE] CLUSTERED {INDEX | KEY} index_name 
          [index_type] (index_col_name,...)
          [drds_partition_options] 
          [index_option] ... 
    説明
    • テーブルのクラスター化インデックスを変更するには、alter_specification句で1つのシャーディングルールのみを指定できます。
    • クラスター化インデックスの名前を指定する必要があります。
    • 変更するテーブルが主キーをシャードキーとして使用している場合、[drds_partition_options] 句でシャーディングルールを指定する必要はありません。

次のステートメントを使用して、PolarDB-Xデータベースにt_orderという名前のテーブルを作成できます。

パーティションの作成TABLE 't_order' (
    -> 't' タイムスタンプnullデフォルトCURRENT_TIMESTAMP、
    -> 'x' int default 3、
    -> 'order_id' varchar(20) DEFAULT NULL、
    -> 'seller_id' varchar(20) デフォルトNULL
    -> ); 

次のステートメントを使用して、t_orderテーブルのクラスター化インデックスを作成できます。

CLUSTERED INDEX 'c_i' ON 't_order' (seller_id, x)
を作成する

クラスター化インデックスの作成後、次のステートメントを使用してベーステーブルのスキーマを照会し、クラスター化インデックスに関する情報を確認できます。

SHOW CREATE TAB_order;

この例では、次の情報が返されます。

+ --------- + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| テーブル | テーブルの作成 |
+ --------- + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| t_order | パーティションの作成TABLE 't_order' (
  't' タイムスタンプNULLデフォルトCURRENT_TIMESTAMP、
  'x' int(11) デフォルト '3' 、
  'order_id' varchar(20) DEFAULT NULL、
  'seller_id 'varchar(20) DEFAULT NULL、
  ローカルキー '_local_c_i' ('seller_id' 、'x') 、
  CLUSTERED INDEX 'c_i'('seller_id' 、'x') DBPARTITION BY HASH('seller_id')
) エンジン=InnoDBデフォルト料金セット=utf8mb4 |
+ --------- + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
1行セット (0.08秒) 

次の文を使用して、クラスタ化インデックスのスキーマを照会できます。

SHOW CREATE TABLE c_i;

返された情報は、クラスタ化インデックスにベーステーブルのすべての列が含まれていることを示します。

+ ------- + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| テーブル | テーブルの作成 |
+ ------- + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| c_i | CREATE TABLE 'c_i' (
  't' タイムスタンプNULLデフォルトCURRENT_TIMESTAMP、
  'x' int(11) デフォルト '3' 、
  'order_id' varchar(20) DEFAULT NULL、
  'seller_id 'varchar(20) DEFAULT NULL、
  KEY 'auto_shard_key_seller_id 'USING BTREE ('seller_id') 、
  KEY 'i_seller_id_x '使用してBTREE ('seller_id' 、'x')
) ENGINE = InnoDB DEFAULT CHARSET=ハッシュによるutf8mb4 dbpartition ('seller_id') |
+ ------- + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
1行セット (0.03秒)