SQL Academy · Ders

Mekânsal İndeksler (GiST)

Konum sorgularını hızlandırın.

4. ders / 413 adım

Mekânsal İndeksler (GiST), CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.

Konum Sorguları Neden Yavaşlar

Milyonlarca restoran konumunu içeren bir tablo düşünün. "Benden 5 km uzaklıktaki tüm restoranları bul" dediğinizde veritabanının mesafeyi hesaplamak için her satırı tek tek denetlemesi gerekir. Buna sıralı tarama denir ve tablo büyüdükçe son derece yavaşlar.

Mekânsal dizinler, geometri verilerini bir ağaç yapısında düzenleyerek bu sorunu çözer; böylece veritabanı tablonun büyük bölümlerini anında atlayabilir.

GiST Dizini Nedir

GiST, Genelleştirilmiş Arama Ağacı anlamına gelir. PostgreSQL'e yerleşik, geometrik şekiller ve PostGIS geometrisi de dâhil olmak üzere birçok veri türünü destekleyen esnek bir dizin altyapısıdır.

Sıralanabilir değerler (tam sayılar veya dizeler gibi) üzerinde çalışan B-ağacı dizininin aksine GiST, noktalar, poligonlar ve çizgiler gibi çok boyutlu verileri dizinleyebilir. PostGIS, mekânsal dizinlerini oluşturmak için GiST'yi dahili olarak kullanır.

Mekânsal Dizin Oluşturma

Bir geometri sütununda GiST dizini oluşturmak kolaydır. CREATE INDEX ile USING gist yan tümcesini kullanırsınız. Bu tek ifade, bir sorgunun dakikalar yerine milisaniyeler içinde tamamlanmasını sağlayabilir.

CREATE INDEX idx_restaurants_geom
  ON restaurants
  USING gist (geom);

GiST Nasıl Çalışır: Sınırlayıcı Kutular

GiST mekânsal dizini kesin geometrileri depolamaz. Bunun yerine sınırlayıcı kutuları depolar; bunlar her geometriyi çevreleyen en küçük dikdörtgenlerdir. Ağaç, her düzeyde birbirine yakın sınırlayıcı kutular gruplanarak oluşturulur.

Bir sorgu çalıştığında PostgreSQL ağaçta aşağı doğru ilerler ve sınırlayıcı kutuları arama alanıyla örtüşmeyen dalları budar. Ardından yalnızca hayatta kalan aday satırlar kesin olarak denetlenir. Bu iki aşamalı yaklaşım (dizin yoklaması + yeniden denetim) son derece verimlidir.

Örnek Tablo Oluşturma

Dizin davranışını incelemeden önce şehir noktalarından oluşan örnek bir tablo oluşturalım ve tabloya birkaç satır ekleyelim. geom sütunu her şehri WGS 84 (SRID 4326) içinde bir Nokta olarak depolar.

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));

GiST Dizini Ekleme

Tabloya veriler eklendikten sonra geom sütununda bir GiST dizini oluşturun. Milyonlarca satır içeren üretim tablolarında bu ifade birkaç dakika sürebilir; ancak yalnızca bir kez çalıştırılması gerekir. Bundan sonra bu sütuna yönelik her mekânsal sorgu otomatik olarak bundan yararlanır.

CREATE INDEX idx_cities_geom
  ON cities
  USING gist (geom);

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

Sınırlayıcı Kutu İşleci &&

PostGIS, iki sınırlayıcı kutunun örtüşüp örtüşmediğini denetlemek için && işleci sunar. Bu işleç dizin kullanımını destekler; planlayıcı GiST dizinini otomatik olarak kullanır. Kesin geometri kesişimlerini hesaplamaktan çok daha hızlıdır ve çoğu zaman hızlı bir ön filtre olarak kullanılır.

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

<-> ile En Yakın Komşu Araması

<-> işleci iki geometri arasındaki mesafeyi döndürür ve GiST tarafından hızlandırılır. Bunu ORDER BY ... LIMIT ile birleştirmek, son derece hızlı bir k-en yakın komşu (KNN) sorgusu sağlar; tablonun tamamını taramak gerekmez.

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

EXPLAIN ile Dizin Kullanımını Doğrulama

Planlayıcının dizininizi gerçekten kullandığını doğrulamak için her zaman EXPLAIN veya EXPLAIN ANALYZE kullanın. Çıktıda Bitmap Dizin Taraması veya idx_cities_geom kullanılarak Dizin Taraması ifadelerini arayın. Bunun yerine Sıralı Tarama görüyorsanız tablo, planlayıcının dizini tercih etmesi için fazla küçük olabilir.

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

Eşzamanlı Dizin Oluşturma

Büyük bir mekânsal dizini standart CREATE INDEX komutuyla oluşturmak, tabloyu yazma işlemlerine kilitler. Üretimde, ekleme veya güncelleme işlemlerini engellemeden dizin oluşturmak için CREATE INDEX CONCURRENTLY kullanın. Bunun karşılığında işlem daha uzun sürer ve bir işlem bloğu içinde çalıştırılamaz.

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

Mekânsal Dizininizin Bakımını Yapma

Zamanla yoğun ekleme, güncelleme ve silme işlemleri dizin şişmesine yol açabilir; dizin parçalanır ve daha az verimli hâle gelir. Dizin tamamen yeniden oluşturmak için REINDEX kullanın veya sorgu planlayıcısının daha iyi kararlar verebilmesi için istatistikleri güncelleyen düzenli VACUUM ANALYZE işlemleri planlayın.

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

-- Update planner statistics for the table
ANALYZE cities;

Hızlı Kontrol: GiST Dizinleri

PostGIS'te GiST ile mekânsal dizinler konusundaki anlayışınızı sınayın.

Özet: GiST ile Mekânsal Dizinler

Bu derste, hızlı konum sorguları için mekânsal dizinlerin neden gerekli olduğunu ve GiST'nin bunları PostgreSQL ile PostGIS'te nasıl mümkün kıldığını öğrendiniz.

Önemli noktalar:

  • GiST (Genelleştirilmiş Arama Ağacı), çok boyutlu geometri verilerini destekleyen esnek bir dizin türüdür.
  • CREATE INDEX ... USING gist (geom) ile mekânsal bir dizin oluşturun.
  • GiST, sınırlayıcı kutuları depolar ve arama ağacını budayarak tablonun tamamının taranmasını önler.
  • && işleci (sınırlayıcı kutu örtüşmesi) ve <-> işleci (mesafe/KNN) GiST tarafından hızlandırılır.
  • Dizin kullanımını doğrulamak için EXPLAIN, yazma kilitlerini önlemek amacıyla üretimde CREATE INDEX CONCURRENTLY kullanın.
  • Sorguların zaman içinde hızlı kalmasını sağlamak için dizinlerin bakımını REINDEX ve ANALYZE ile yapın.
Başlamak ücretsiz

Yapay zeka eğitmeniyle SQL öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
46
Dersler
183

Sıkça Sorulan Sorular

“Mekânsal İndeksler (GiST)” dersi ücretsiz mi?

Evet — “Mekânsal İndeksler (GiST)” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.

“Mekânsal İndeksler (GiST)” dersinde ne öğreneceğim?

Konum sorgularını hızlandırın. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

SQL Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Mekânsal İndeksler (GiST)” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Mekânsal Veri Türleri
  2. Mesafe ve En Yakın Komşular
  3. Mekânsal Birleştirmeler ve İçerme
  4. Mekânsal İndeksler (GiST)
← SQL Academy Sayfasına Dön