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

AnalyticDB:btree_gist

最終更新日:Sep 27, 2024

btree_gist拡張は、一般化検索ツリー (GiST) インデックス構造を使用してBツリーの動作をシミュレートします。 GiSTを使用すると、新しいデータ型のカスタムインデックスポリシーを設定できます。 これは、多次元データや地理情報システム (GIS) データなどの複雑なデータ型のインデックス要件を満たすのに役立ち、効率的な検索パフォーマンスを提供します。

概要

btree_gist拡張機能は、基本データ型 とすべての列挙型に対してBツリーと同等の動作を実装するGiSTインデックス演算子クラスを提供します。 ほとんどの場合、演算子クラスは、対応する標準Bツリー索引方法よりも優れておらず、演算子クラスは、標準Bツリーコードの主要な特徴である一意性を実施する能力を欠いている。 ただし、演算子クラスは、Bツリーインデックスでは使用できない特定の機能を提供します。

一般的なBツリー検索演算子に加えて、btree_gist拡張子はNotEqual (<>) 演算子のインデックスサポートを提供します。 これは、除外制約と組み合わせて有用であり得る。

自然距離メトリックを含むデータ型の場合、btree_gist拡張子は距離演算子 (<->) を定義し、演算子を使用する最近傍検索のGiSTインデックスサポートを提供します。 距離演算子は、特定の基本データ型 に対してのみ提供されます。

説明
  • : 基本データ型は、Int2、Int4、Int8、Float4、Float8、Numeric、Timestamp with time zone、Timestamp without time zone、Time without time、Date、Interval、Oid、Money、Char、Varchar、Text、Bytea、Bit、Varbit、Macaddr、Macaddr8、Inet、Cidr、BoUID。

  • : 特定の基本データ型には、Int2、Int4、Int8、Float4、Float8、Numeric、Timestamp with time zone、Timestamp without time zone、Time with time、Time without time zone、Date、Interval、Oid、Moneyなどがあります。

使用上の注意

次のマイナーバージョン要件を満たすエラスティックストレージモードのAnalyticDB for PostgreSQLインスタンスのみが、btree_gist拡張機能をサポートしています。

  • AnalyticDB for PostgreSQL V6.0: V6.6.2.1以降。

  • AnalyticDB for PostgreSQL V7.0: V7.0.6.1以降。

Install the extension

拡張機能を使用するAnalyticDB for PostgreSQLインスタンスの [Extensions] ページにbtree_gist拡張機能をインストールします。 詳細については、「拡張機能のインストール、更新、およびアンインストール」をご参照ください。

GiSTインデックス構造

GiSTは、複雑なデータ型のインデックスを作成できるPostgreSQLの一般化されたインデックスフレームワークです。 GiSTは、バランスの取れたツリー構造であり、BツリーおよびRツリーインデックスの一般化と見なすことができる。 GiSTはさまざまな検索ポリシーをサポートしています。

GiSTインデックスは、次の機能を提供します。

  • GiSTインデックスを使用すると、新しいデータ型のカスタムインデックスポリシーを設定できます。 整数や文字列などの一般的なデータ型に加えて、GISデータ、フルテキスト検索データ、配列、およびその他のより複雑なデータ構造のインデックスを作成できます。 btree_gist拡張は、GiSTインデックスの拡張性に基づいて設計されています。

  • GiSTインデックスは、Equal、NotEqual、範囲クエリ、最近傍検索などのさまざまなクエリをサポートしています。

  • GiSTインデックスは、多次元データやGISデータなど、Bツリーインデックスでサポートされていない複雑なデータ型に適しています。

  • GiSTインデックスは効率的なデータ検索をサポートし、複雑なデータ型のクエリを大幅に高速化できます。

ただし、GiSTインデックスは、Bツリーなどの従来のインデックス構造と比較して、特定の側面でパフォーマンスの妥協点があります。 作成および削除操作などのGiSTインデックスの管理は、Bツリーインデックスの管理よりも複雑で効率が悪い場合があります。 B-treeインデックスと比較して、GiSTインデックスは作成または再構築に時間がかかります。 GiSTインデックスを選択するときは注意してください。

B-treeインデックスの置き換え

btree_gist拡張機能を使用して、スカラー値の自然な距離尺度を実装します。

たとえば、次のステートメントを実行して、列aの値が42に最も近い10のデータエントリを照会します。

CREATE TABLE test (a int4);
-- Create an index. 
CREATE INDEX testidx ON test USING GIST (a);
-- Query data. 
SELECT * FROM test WHERE a < 10;
-- Perform a nearest neighbor search to find the 10 data entries whose values in column a are closest to 42. 
SELECT *, a <-> 42 AS dist FROM test ORDER BY a <-> 42 LIMIT 10;

結論の制約

btree_gist拡張を使用して、結論制約を実装します。

たとえば、動物園の1つのケージには1種類の動物しか入れることができません。 シマウマを含むケージ123は、ライオンではなく、別のシマウマを受け取ることができます。 動物を含まないケージ124は、ライオンを受け取ることができます。

=> CREATE TABLE zoo (
  cage   INTEGER,
  animal TEXT,
  EXCLUDE USING GIST (cage WITH =, animal WITH <>)
);
=> INSERT INTO zoo VALUES(123, 'zebra');
INSERT 0 1 -- The result indicates that one row is written and no row is deleted. 

=> INSERT INTO zoo VALUES(123, 'zebra');
INSERT 0 1

=> INSERT INTO zoo VALUES(123, 'lion');
ERROR:  conflicting key value violates exclusion constraint "zoo_cage_animal_excl"
DETAIL:  Key (cage, animal)=(123, lion) conflicts with existing key (cage, animal)=(123, zebra).

=> INSERT INTO zoo VALUES(124, 'lion');
INSERT 0 1