このトピックでは、HypoPG拡張機能を使用して、ApsaraDB RDS for PostgreSQLインスタンスの仮想インデックスを作成する方法について説明します。 作成した仮想インデックスを使用して、インデックスがクエリパフォーマンスを向上できるかどうかを確認できます。 仮想インデックスは実際のインデックスではなく、CPUコアやディスクリソースなどのリソースを消費しません。
前提条件
RDSインスタンスは、20230830以降のマイナーエンジンバージョンを実行します。
重要拡張機能は、20230830より前のマイナーエンジンバージョンでサポートされています。 ApsaraDB RDS for PostgreSQLの拡張機能管理を標準化し、拡張機能のセキュリティを強化するために、ApsaraDB RDSはマイナーエンジンバージョンのイテレーションで脆弱な拡張機能を最適化する予定です。 その結果、以前のマイナーエンジンバージョンを実行するRDSインスタンスに対して、一部の拡張機能を作成できなくなりました。 詳細については、「 [製品の変更 /機能の変更] ApsaraDB RDS For PostgreSQLインスタンスの拡張機能作成の制限」をご参照ください。
20230830より前のマイナーエンジンバージョンを実行するRDSインスタンスの拡張機能を作成した場合、その拡張機能は影響を受けません。
RDSインスタンスの拡張機能を初めて作成する場合、または拡張機能を再作成する場合は、RDSインスタンスのマイナーエンジンバージョンを最新バージョンに更新する必要があります。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。
- RDSインスタンスへの接続には、特権アカウントが使用されます。 ApsaraDB RDSコンソールの [アカウント] ページで、使用するアカウントのタイプを確認できます。 アカウントが標準アカウントの場合、特権アカウントを作成し、その特権アカウントを使用してRDSインスタンスに接続する必要があります。 詳細については、「アカウントの作成」をご参照ください。
HypoPG拡張機能を有効または無効にします。
- 次のステートメントを実行して、HypoPG拡張機能を有効にします。
CREATE extension hypopg;
説明 特権アカウントにのみ、上記のステートメントを実行する権限が付与されます。 - 次のステートメントを実行して、HypoPG拡張機能を無効にします。
DROP extension hypopg;
説明 特権アカウントにのみ、上記のステートメントを実行する権限が付与されます。
例
- テーブルを作成し、テストデータをテーブルに挿入します。
extension hypopgを作成します。CREATE TABLEハイポ (id整数、valテキスト); INSERT INTOハイポSELECT i、'line '| | i FROM generate_series(1, 100000) i; 真空分析ハイポ;
- テーブルにインデックスが作成されていない場合のSQL文の実行計画のクエリパフォーマンスを確認します。
EXPLAIN SELECT val FROM hypo WHERE id = 1; クエリ計画 -------------------------------------------------------- ハイポのSeqスキャン (コスト=0.00 .. 1791.00行=1幅=14) フィルター: (id = 1) (2行)
- 仮想インデックスを作成します。
SELECT * FROM hypopg_create_index('CREATE INDEX ON hypo (id)') ; indexrerid | indexname ------------- ---------------------- 18284 | <18284>btree_hypo_id (1行)
- 仮想インデックスが実行計画のクエリパフォーマンスを向上させるかどうかを確認します。
EXPLAIN SELECT val FROM hypo WHERE id = 1; クエリ計画 ---------------------------------------------------------------------------------- hypoで <18284>btree_hypo_idを使用したインデックススキャン (コスト=0.04 .. 8.06行=1 width=10) Index Cond :( id = 1) (2行)
- 実行されるSQL文の実行計画を確認してください。 作成した仮想インデックスは、SQL文の実行計画では使用されません。
EXPLAIN解析SELECT val FROM hypo WHERE id = 1; クエリ計画 --------------------------------------------------------------------------------------------------- ハイポでのSeqスキャン (コスト=0.00 .. 1791.00行=1幅=10) (実際の時間=0.046 .. 46.390行=1ループ=1) フィルター: (id = 1) フィルターによって削除された行: 99999 計画時間: 0.160 ms 実行時間: 46.460 ms (5行)
参考資料
HypoPGの詳細については、「HypoPGの使用方法」をご参照ください。