btree_gist
提供了 GiST 索引運算元類,這些類為資料型別 int2
、int4
、int8
、float4
、float8
、numeric
、timestamp with time zone
、timestamp without time zone
、time with time zone
、time without time zone
、date
、interval
、oid
、money
、char
、varchar
、text
、bytea
、bit
、varbit
、macaddr
、macaddr8
、inet
、cidr
、uuid
、bool
以及所有 enum
型別實現了等同於 B-tree 的行為。
總的來說,這些運算元類的效能不會超過等效的標準 B-tree 索引方法,並且它們缺少標準 B-tree 程式碼的一項主要功能:強制唯一性的能力。但是,它們提供了一些 B-tree 索引所不具備的其他功能,如下所述。此外,當需要多列 GiST 索引時,這些運算元類會很有用,其中一些列是隻能用 GiST 索引的資料型別,而其他列只是簡單的資料型別。最後,這些運算元類對於 GiST 測試以及作為開發其他 GiST 運算元類的方法很有用。
除了典型的 B-tree 搜尋運算元之外,btree_gist
還為 <>
(“不等於”)提供了索引支援。這可能與 排除約束 結合使用,如下所述。
此外,對於具有自然距離度量的資料型別,btree_gist
定義了一個距離運算元 <->
,併為使用此運算元的最近鄰搜尋提供了 GiST 索引支援。距離運算元適用於 int2
、int4
、int8
、float4
、float8
、timestamp with time zone
、timestamp without time zone
、time without time zone
、date
、interval
、oid
和 money
。
預設情況下,btree_gist
構建GiST索引時處於 已排序 模式下的 sortsupport
。這通常會大大加快索引構建速度。透過在建立索引時使用 buffering
引數,仍然可以恢復到緩衝構建策略。
此模組被認為是“受信任的”,這意味著非超級使用者也可以在其擁有的資料庫上安裝它,前提是他們具有 CREATE
許可權。
使用 btree_gist
而非 btree
的簡單示例
CREATE TABLE test (a int4); -- create index CREATE INDEX testidx ON test USING GIST (a); -- query SELECT * FROM test WHERE a < 10; -- nearest-neighbor search: find the ten entries closest to "42" SELECT *, a <-> 42 AS dist FROM test ORDER BY a <-> 42 LIMIT 10;
使用 排除約束 來強制執行動物園中的籠子只能容納一種動物的規則
=> CREATE TABLE zoo ( cage INTEGER, animal TEXT, EXCLUDE USING GIST (cage WITH =, animal WITH <>) ); => INSERT INTO zoo VALUES(123, 'zebra'); INSERT 0 1 => 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
Teodor Sigaev (<teodor@stack.net>
)、Oleg Bartunov (<oleg@sai.msu.su>
)、Janko Richter (<jankorichter@yahoo.de>
) 和 Paul Jungwirth (<pj@illuminatedcomputing.com>
)。有關更多資訊,請參閱 http://www.sai.msu.su/~megera/postgres/gist/。
如果您在文件中發現任何不正確之處、與您對特定功能的體驗不符之處或需要進一步澄清之處,請使用 此表格 報告文件問題。