All Products
Search
Document Center

AnalyticDB:btree_gist

Last Updated:Jul 02, 2025

Ekstensi btree_gist menggunakan struktur indeks Generalized Search Tree (GiST) untuk mensimulasikan perilaku B-tree. GiST memungkinkan Anda mengonfigurasi kebijakan indeks kustom untuk tipe data baru, mendukung persyaratan indeks untuk tipe data kompleks seperti data multidimensi dan sistem informasi geografis (GIS), serta memberikan performa pencarian yang efisien.

Pengenalan

Ekstensi btree_gist menyediakan kelas operator indeks GiST yang mengimplementasikan perilaku setara dengan B-tree untuk tipe data dasar dan semua tipe enumerasi. Dalam kebanyakan kasus, kelas operator ini tidak lebih unggul dibandingkan metode indeks B-tree standar, dan kurang mampu menegakkan keunikan, fitur utama dari kode B-tree standar. Namun, kelas operator ini menyediakan fitur spesifik yang tidak tersedia dalam indeks B-tree.

Selain operator pencarian B-tree biasa, ekstensi btree_gist menyediakan dukungan indeks untuk operator NotEqual (<>), yang dapat berguna jika digabungkan dengan kendala pengecualian.

Untuk tipe data yang melibatkan metrik jarak alami, ekstensi btree_gist mendefinisikan operator jarak (<->) dan menyediakan dukungan indeks GiST untuk pencarian tetangga terdekat yang menggunakan operator tersebut. Operator jarak hanya disediakan untuk tipe data dasar tertentu.

Catatan
  • : Tipe data dasar mencakup Int2, Int4, Int8, Float4, Float8, Numeric, Timestamp dengan zona waktu, Timestamp tanpa zona waktu, Time dengan zona waktu, Time tanpa zona waktu, Date, Interval, Oid, Money, Char, Varchar, Text, Bytea, Bit, Varbit, Macaddr, Macaddr8, Inet, Cidr, UUID, dan Bool.

  • : Tipe data dasar tertentu mencakup Int2, Int4, Int8, Float4, Float8, Numeric, Timestamp dengan zona waktu, Timestamp tanpa zona waktu, Time dengan zona waktu, Time tanpa zona waktu, Date, Interval, Oid, dan Money.

Catatan Penggunaan

Hanya instance AnalyticDB for PostgreSQL dalam mode penyimpanan elastis yang memenuhi persyaratan versi minor berikut yang mendukung ekstensi btree_gist:

  • AnalyticDB for PostgreSQL V6.0: V6.6.2.1 atau yang lebih baru.

  • AnalyticDB for PostgreSQL V7.0: V7.0.6.1 atau yang lebih baru.

Instal Ekstensi

Instal ekstensi btree_gist di halaman Ekstensi dari instance AnalyticDB for PostgreSQL tempat Anda ingin menggunakan ekstensi tersebut. Untuk informasi lebih lanjut, lihat Instal, perbarui, dan hapus ekstensi.

Struktur Indeks GiST

GiST adalah kerangka kerja indeks umum di PostgreSQL yang memungkinkan Anda membuat indeks untuk tipe data kompleks. GiST adalah struktur pohon seimbang dan dapat dianggap sebagai generalisasi dari indeks B-tree dan R-tree. GiST mendukung berbagai kebijakan pencarian.

Indeks GiST menyediakan fitur-fitur berikut:

  • Indeks GiST memungkinkan Anda mengonfigurasi kebijakan indeks kustom untuk tipe data baru. Selain tipe data umum seperti bilangan bulat dan string, Anda dapat membuat indeks untuk data GIS, data pencarian teks lengkap, array, dan struktur data kompleks lainnya. Ekstensi btree_gist dirancang berdasarkan kemampuan ekstensibilitas indeks GiST.

  • Indeks GiST mendukung berbagai jenis kueri, seperti Equal, NotEqual, kueri rentang, dan pencarian tetangga terdekat.

  • Indeks GiST cocok untuk tipe data kompleks yang tidak didukung oleh indeks B-tree, seperti data multidimensi dan data GIS.

  • Indeks GiST mendukung pencarian data yang efisien dan dapat secara signifikan mempercepat kueri untuk tipe data kompleks.

Namun, indeks GiST memiliki kompromi performa dalam aspek tertentu dibandingkan dengan struktur indeks tradisional seperti B-tree. Pengelolaan indeks GiST, seperti operasi pembuatan dan penghapusan, mungkin lebih kompleks dan kurang efisien dibandingkan dengan pengelolaan indeks B-tree. Dibandingkan dengan indeks B-tree, indeks GiST memerlukan lebih banyak waktu untuk dibuat atau dibangun ulang. Berhati-hatilah saat memilih indeks GiST.

Contoh

Penggantian Indeks B-tree

Gunakan ekstensi btree_gist untuk mengimplementasikan ukuran jarak alami untuk nilai skalar.

Sebagai contoh, jalankan pernyataan berikut untuk menanyakan 10 entri data yang nilainya di kolom a paling dekat dengan 42.

CREATE TABLE test (a int4);
-- Buat indeks. 
CREATE INDEX testidx ON test USING GIST (a);
-- Kueri data. 
SELECT * FROM test WHERE a < 10;
-- Lakukan pencarian tetangga terdekat untuk menemukan 10 entri data yang nilainya di kolom a paling dekat dengan 42. 
SELECT *, a <-> 42 AS dist FROM test ORDER BY a <-> 42 LIMIT 10;

Kendala Kesimpulan

Gunakan ekstensi btree_gist untuk mengimplementasikan kendala kesimpulan.

Sebagai contoh, satu kandang di kebun binatang hanya dapat menampung satu jenis hewan. Kandang 123, yang berisi zebra, diizinkan menerima zebra lain tetapi tidak singa. Kandang 124, yang tidak berisi hewan, diizinkan menerima singa.

=> CREATE TABLE zoo (
  cage   INTEGER,
  animal TEXT,
  EXCLUDE USING GIST (cage WITH =, animal WITH <>)
);
=> INSERT INTO zoo VALUES(123, 'zebra');
INSERT 0 1 -- Hasilnya menunjukkan bahwa satu baris ditulis dan tidak ada baris yang dihapus. 

=> 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