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/。
如果您在文件中發現任何不正確之處、與您對特定功能的體驗不符之處或需要進一步澄清之處,請使用 此表格 報告文件問題。