16 puan yazan xguru 2024-04-15 | 3 yorum | WhatsApp'ta paylaş
  • Sorgu performansını iyileştirmek için indeks öneren, Supabase tarafından geliştirilen bir PostgreSQL eklentisi
  • index_advisor() fonksiyonuna bir sorgu verildiğinde, başlangıç/toplam için önceki/sonraki maliyetleri ve indeks oluşturmak için SQL DDL döndürür
    • Çalıştırma: select * from index_advisor('select book.id from book where title = $1');
    • Dönüş: {"CREATE INDEX ON public.book USING btree (title)"}
  • Karmaşık sorgular için birden fazla indeks oluşturma ifadesi de döndürebilir
  • Jenerik parametre desteği ($1, $2, ..)
  • Materialized View desteği
  • View tarafından gizlenen tablo/sütunları tespit edebilir

3 yorum

 
savvykang 2024-04-15

Mevcut sürümde yalnızca tek sütunlu btree indeksleri öneriliyor. Sorgu koşulları karmaşıklaştığında veya full text araması yapıyorsanız bunu kullanamazsınız https://supabase.com/docs/guides/…

 
savvykang 2024-04-16

Sorgu koşulları karmaşık olduğunda çok sütunlu indeks yerine birden fazla tek sütunlu indeksin kullanıldığı söyleniyor, ancak bunun tam olarak aynı şekilde çalışmadığı anlaşılıyor. Ya da çok sütunlu indeks ile birden fazla tek sütunlu indeksi aynı anda kullanmanın en iyi olduğu durumlar da var deniyor.

https://www.postgresql.org/docs/current/indexes-bitmap-scans.html

 
xguru 2024-04-15

Hacker News yorumları

  • Gerçekte tabloda depolanan verilere dayanarak daha verimli veri türleri önerebilen bir özellik olsa iyi olurdu
  • Yavaş sorguları otomatik olarak tespit edip gerekli indeksleri oluşturan bir veritabanı olsa iyi olurdu
    • Uygulamada load test çalıştırırsın, veritabanı çağrılır ve sorgular toplanır, ardından veritabanı kendini otomatik olarak ayarlar
  • HypoPG'nin RDS'de 1 yıldan uzun süredir kullanılabildiğini bilmiyordum
  • 3'ten fazla join olduğunda bir relation üzerinde indeks kullanılmasını istiyorum ama CTE'ye limit koymazsan Postgres her join'i paralel çalıştırmaya uğraşıyor ve çok sayıda satırı join etmeye çalışıyor
    • Son zamanlarda query planner ile uğraşmak beni pg'den ayrılma noktasına getirecek gibi
  • CockroachDB'de buna benzer bir özellik yerleşik olarak var
    • Mevcut yavaş sorguları alıp daha iyi bir sorgu planı için sanal indeksleri analiz ediyor ve önerilerde bulunuyor
    • Konsol UI üzerinden tek tıkla eklenebiliyor
  • Presto veya Spark gibi dağıtık sorgu motorlarında benzer işleri indeks yerine partition ve bucket kullanarak yapıyorlar
    • Bu, hesaplama yükünü, zamanı ve maliyeti azaltabilir
  • Vanilla Pl/PgSQL ile yazılmış olması kullanışlı
    • index_advisor(text) fonksiyonunu oturuma kopyalayıp hard-code ve heuristic denemelerine başlama cazibesi var
    • Anlamlı genişletmelerin çoğu compile, install, create ve drop gerektiriyor
  • TiDB'nin TiAdvisor'ına benziyor; sanal bir yöntem kullanıyor
  • pghero kullanıyorum ve bu özelliği GUI üzerinden sunuyor
  • Görünüşe göre ilgili trade-off'lara dair değerlendirme veya içgörü sunmuyor
    • Temel eklenti olan HypoPG, query planner'ı etkileyen veriler için istatistik toplamıyor gibi görünüyor
  • Kalıtımla gelen parent ve child tabloları tanıyıp tanımadığını merak ediyorum