このトピックでは、INVISIBLE INDEX機能の使用方法について説明します。
の背景情報
PolarDB-Xを使用すると、インデックスの可視性をVISIBLEまたはINVISIBLEに設定できます。 インデックスの可視性をINVISIBLEに設定した場合、オプティマイザはインデックスを使用しません。
大きなテーブルのインデックスの作成または削除には、かなりの時間がかかる場合があります。 ただし、テーブル内のインデックスの表示を変更することで、この操作を迅速かつ効率的に完了できます。 インデックスを削除することなく、インデックスの表示をINVISIBLEに設定することで、インデックスの削除がビジネスに与える影響を評価できます。
前提条件
PolarDB-Xのバージョンは5.4.17-16835173以降です。 インスタンスバージョンの表示方法については、「インスタンスのバージョンの表示と更新」をご参照ください。
使用状況ノート
INVISIBLE INDEX機能は、データベースのAUTOモードとDRDSモードで使用できます。
INVISIBLE INDEX機能は、グローバルセカンダリインデックスのみをサポートします。 ローカルインデックスはサポートされていません。
インデックスの可視性を変更しても、インデックスの維持方法には影響しません。 インデックスの可視性がINVISIBLEまたはVISIBLEに設定されているかどうかに関係なく、プライマリテーブルのデータが更新されるとインデックスデータが変更されます。 インデックスに一意の制約がある場合、インデックスの可視性を変更しても制約には影響しません。
インデックスの可視性をINVISIBLEに設定し、クエリのインデックスにFORCE indexヒントを使用すると、ヒントは有効になりません。
例
次の例では、AUTOモードのデータベースの構文を使用してテーブルを作成します。
インデックスにVISIBLEまたはINVISIBLEキーワードを指定せずにテーブルを作成します。 デフォルトでは、インデックスの表示はVISIBLEに設定されています。
テーブルt_orderを作成 ( 'id' bigint(11) 、 'order_id' varchar(20) 、 'buyer_id 'varchar(20) 、 グローバルインデックス 'g_order_id ' (order_id) キーによるパーティション (order_id) ) ハッシュによるパーティション ('id');
テーブルを作成するときのインデックスの表示を指定します。
テーブルt_orderを作成 ( 'id' bigint(11) 、 'order_id' varchar(20) 、 'buyer_id 'varchar(20) 、 グローバルインデックス 'g_order_id ' (order_id) キーによるパーティション (order_id) 非表示 ) ハッシュによるパーティション ('id');
テーブルにインデックスを追加し、インデックスの表示を指定します。 VISIBLEまたはINVISIBLEキーワードを指定しない場合、インデックスは表示されます。
alter table t_order add global index g_buyer_id(buyer_id) partition by hash(buyer_id) invisible;
インデックスの表示を変更します。
-- インデックスの可視性をINVISIBLEに変更します。 alter table t_order alter index 'g_order_id 'invisible; -インデックスの表示をVISIBLEに変更します。 alter table t_order alter index 'g_order_id 'visible;
FAQ
インデックスの可視性をINVISIBLEに設定した後、インデックスの削除がビジネスに与える影響を評価するためにどの側面をチェックする必要がありますか?
いくつかの側面を確認できます。以下に限定されません。
ビジネス負荷が変わらない場合は、PolarDB-XインスタンスのCPUとメモリメトリックが大幅に異なるかどうかを確認します。
予期しない低速SQLクエリが発生するかどうかを確認します。
ストレステストを実施する場合は、テスト結果が大幅に異なるかどうかを確認してください。
FORCE INDEXヒントを使用してクエリ文でインデックスを指定した場合は、これらのクエリが低速クエリになるかどうかを確認します。
インデックスの表示をINVISIBLEに変更すると、インデックスを使用するすべてのSQL文が影響を受けます。 インデックスを使用しない特定のSQL文の実行結果を表示するにはどうすればよいですか?
この場合、目に見えないインデックスを使用する必要はありません。 IGNORE INDEXヒントを使用して、クエリを実行するときにインデックスを無視するようにクエリオプティマイザに指示できます。