0Pricing
SQL Academy · Pelajaran

Indeks Spasial (GiST)

Percepat kueri lokasi.

Indeks Spasial (GiST) adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.

Mengapa Kueri Lokasi Menjadi Lambat

Bayangkan sebuah tabel dengan jutaan lokasi restoran. Jika Anda bertanya "Temukan semua restoran dalam jarak 5 km dari saya," basis data harus memeriksa setiap baris untuk menghitung jaraknya. Ini disebut pemindaian berurutan, dan prosesnya menjadi sangat lambat seiring bertambah besarnya tabel.

Indeks spasial mengatasi masalah ini dengan mengatur data geometri ke dalam struktur pohon, sehingga basis data dapat langsung melewati sebagian besar tabel.

Apa Itu Indeks GiST

GiST adalah singkatan dari Pohon Pencarian Umum. Ini adalah kerangka kerja indeks fleksibel yang terintegrasi dalam PostgreSQL dan mendukung banyak tipe data, termasuk bentuk geometris dan geometri PostGIS.

Berbeda dari indeks B-tree (yang bekerja pada nilai yang dapat diurutkan seperti bilangan bulat atau teks), GiST dapat mengindeks data multidimensi seperti titik, poligon, dan garis. PostGIS menggunakan GiST secara internal untuk membuat indeks spasialnya.

Membuat Indeks Spasial

Membuat indeks GiST pada kolom geometri cukup sederhana. Anda menggunakan CREATE INDEX dengan klausa USING gist. Satu pernyataan ini dapat mengubah waktu eksekusi kueri dari beberapa menit menjadi beberapa milidetik.

CREATE INDEX idx_restaurants_geom
  ON restaurants
  USING gist (geom);

Cara Kerja GiST: Kotak Pembatas

Indeks spasial GiST tidak menyimpan geometri yang tepat. Sebagai gantinya, indeks ini menyimpan kotak pembatas — persegi panjang terkecil yang mencakup setiap geometri. Pohon dibangun dengan mengelompokkan kotak pembatas yang berdekatan pada setiap tingkat.

Saat kueri dijalankan, PostgreSQL menelusuri pohon ke bawah dan memangkas cabang yang kotak pembatasnya tidak bertumpang tindih dengan area pencarian. Hanya baris kandidat yang tersisa yang kemudian diperiksa secara presisi. Pendekatan dua tahap ini (pemeriksaan indeks + pemeriksaan ulang) sangat efisien.

Menyiapkan Tabel Contoh

Sebelum mempelajari perilaku indeks, mari buat tabel contoh berisi titik-titik kota dan isi dengan beberapa baris. Kolom geom menyimpan setiap kota sebagai Titik dalam WGS 84 (SRID 4326).

CREATE TABLE cities (
  id   SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  geom GEOMETRY(Point, 4326)
);

INSERT INTO cities (name, geom) VALUES
  ('Paris',    ST_SetSRID(ST_MakePoint(2.3522,  48.8566), 4326)),
  ('Berlin',   ST_SetSRID(ST_MakePoint(13.4050, 52.5200), 4326)),
  ('Madrid',   ST_SetSRID(ST_MakePoint(-3.7038, 40.4168), 4326)),
  ('Rome',     ST_SetSRID(ST_MakePoint(12.4964, 41.9028), 4326)),
  ('Warsaw',   ST_SetSRID(ST_MakePoint(21.0122, 52.2297), 4326));

Menambahkan Indeks GiST

Setelah tabel diisi, tambahkan indeks GiST pada kolom geom. Untuk tabel produksi dengan jutaan baris, pernyataan ini mungkin memerlukan waktu beberapa menit, tetapi hanya perlu dijalankan sekali. Setelah itu, setiap kueri spasial pada kolom ini akan memperoleh manfaatnya secara otomatis.

CREATE INDEX idx_cities_geom
  ON cities
  USING gist (geom);

-- Verify the index exists
SELECT indexname, indexdef
FROM   pg_indexes
WHERE  tablename = 'cities';

Operator Kotak Pembatas &&

PostGIS menyediakan operator && untuk menguji apakah dua kotak pembatas saling bertumpang tindih. Operator ini menyadari indeks — perencana kueri menggunakan indeks GiST secara otomatis. Operator ini jauh lebih cepat daripada menghitung irisan geometri yang tepat dan sering digunakan sebagai pra-filter cepat.

-- Find cities whose bounding box overlaps a search rectangle
SELECT name
FROM   cities
WHERE  geom && ST_MakeEnvelope(-5, 40, 15, 50, 4326);

Pencarian Tetangga Terdekat dengan <->

Operator <-> mengembalikan jarak antara dua geometri dan juga dipercepat oleh GiST. Menggabungkannya dengan ORDER BY ... LIMIT menghasilkan kueri k-tetangga terdekat (KNN) yang sangat cepat — tanpa perlu melakukan pemindaian seluruh tabel.

-- Find the 3 cities closest to a reference point (Brussels)
SELECT name,
       ST_Distance(
         geom::geography,
         ST_SetSRID(ST_MakePoint(4.3517, 50.8503), 4326)::geography
       ) / 1000 AS distance_km
FROM   cities
ORDER BY geom <-> ST_SetSRID(ST_MakePoint(4.3517, 50.8503), 4326)
LIMIT  3;

Memverifikasi Penggunaan Indeks dengan EXPLAIN

Selalu gunakan EXPLAIN atau EXPLAIN ANALYZE untuk memastikan bahwa perencana benar-benar menggunakan indeks Anda. Cari Pemindaian Indeks Bitmap atau Pemindaian Indeks menggunakan idx_cities_geom dalam keluaran. Jika Anda melihat Pemindaian Berurutan, tabel mungkin terlalu kecil sehingga perencana tidak memilih indeks.

EXPLAIN
SELECT name
FROM   cities
WHERE  geom && ST_MakeEnvelope(-5, 40, 15, 50, 4326);

Membuat Indeks Secara Bersamaan

Membangun indeks spasial besar dengan perintah CREATE INDEX standar akan mengunci tabel dari operasi tulis. Dalam lingkungan produksi, gunakan CREATE INDEX CONCURRENTLY untuk membangun indeks tanpa menghalangi penyisipan atau pembaruan. Konsekuensinya, proses ini memerlukan waktu lebih lama dan tidak dapat dijalankan di dalam blok transaksi.

-- Safe for production tables (no write lock)
CREATE INDEX CONCURRENTLY idx_restaurants_geom
  ON restaurants
  USING gist (geom);

Memelihara Indeks Spasial

Seiring waktu, penyisipan, pembaruan, dan penghapusan dalam jumlah besar dapat menyebabkan pembengkakan indeks — indeks menjadi terfragmentasi dan kurang efisien. Gunakan REINDEX untuk membangunnya kembali dengan rapi, atau jadwalkan VACUUM ANALYZE secara berkala untuk memperbarui statistik agar perencana kueri dapat mengambil keputusan yang lebih baik.

-- Rebuild the index to remove bloat
REINDEX INDEX idx_cities_geom;

-- Update planner statistics for the table
ANALYZE cities;

Pemeriksaan Singkat: Indeks GiST

Uji pemahaman Anda tentang indeks spasial dengan GiST di PostGIS.

Rangkuman: Indeks Spasial dengan GiST

Dalam pelajaran ini, Anda mempelajari alasan indeks spasial sangat penting untuk kueri lokasi yang berkinerja baik dan cara GiST mewujudkannya di PostgreSQL dan PostGIS.

Hal-hal penting:

  • GiST (Pohon Pencarian Umum) adalah tipe indeks fleksibel yang mendukung data geometri multidimensi.
  • Buat indeks spasial dengan CREATE INDEX ... USING gist (geom).
  • GiST menyimpan kotak pembatas dan memangkas pohon pencarian, sehingga menghindari pemindaian seluruh tabel.
  • Operator && (tumpang tindih kotak pembatas) dan operator <-> (jarak/KNN) sama-sama dipercepat oleh GiST.
  • Gunakan EXPLAIN untuk memverifikasi penggunaan indeks dan CREATE INDEX CONCURRENTLY dalam produksi agar terhindar dari penguncian operasi tulis.
  • Pelihara indeks dengan REINDEX dan ANALYZE agar kueri tetap cepat seiring waktu.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Indeks Spasial (GiST)” gratis?

Ya — teks lengkap “Indeks Spasial (GiST)” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Indeks Spasial (GiST)”?

Percepat kueri lokasi. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Academy?

Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Indeks Spasial (GiST)” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Jenis Data Spasial
  2. Jarak dan Tetangga Terdekat
  3. Penggabungan dan Pencakupan Spasial
  4. Indeks Spasial (GiST)
← Kembali ke SQL Academy