Modül dersleri (2/4)
AÇIKLAYIN ve ANALİZ EDİN
Az önce oluşturduğunuz güzel dizini kullanıp kullanmamayı veritabanının nasıl seçtiğini hiç merak ettiniz mi? Bir sorguda Enter tuşuna bastığınızda (örneğin, zincirleme bir grupla uzun bir birleşme), Sorgu Planlayıcı sorguyu gerçekleştirmek için anında düzinelerce strateji hesaplar ve teoride en hızlı olduğuna inanılan stratejiyi seçer.
Ancak bir geliştirici olarak Sorgu Planlayıcının karanlık zihninin içine bakabilmeniz gerekir.
AÇIKLAMAK
Planlayıcının nasıl ilerlemeyi planladığını keşfetmek için sorgunuzun başına EXPLAIN sihirli kelimesini koymanız yeterlidir.
EXPLAIN SELECT * FROM orders WHERE status = 'delivered';Sonuç emir olmayacak! Bunun yerine çıktıda planı göreceksiniz (tahmini istatistiklerle birlikte):
Seq Scan on orders (cost=0.00..25.88 rows=15 width=40)
Filter: (status = 'delivered'::text)Bu bize şunları söylüyor:
- Planlayıcı Sıralı Tarama (tüm diskin kaba, sıralı okunması) kullanacaktır. Milyarlarca sipariş varsa kötü.
- Yaklaşık 15 satırın döndürüleceğini tahmin eder ve önceden yüklenmiş CPU döngülerindeki "maliyeti" hesaplar.
ANALİZİ AÇIKLAYIN
EXPLAIN algoritmik tahminlere dayanırken (veriler üzerinde son birkaç saatte hesaplanan genel istatistiklere dayanarak), EXPLAIN ANALYZE aslında sorguyu gerçek anlamda çalıştırır (ve tam mantıksal sonuçları bekler), geçen süreyi matematiksel olarak mutlak terimlerle karşılaştırır.
EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 90;Index Scan using idx_orders_cust on orders (cost=0.15..8.13 rows=4 width=40) (actual time=0.012..0.015 rows=4 loops=1)
Index Cond: (customer_id = 90)
Planning Time: 0.081 ms
Execution Time: 0.033 msYaşasın! Burada veritabanının ikincil idx_orders_cust indeksimize bir Dizin Taraması uygulamaya karar verdiğini, saniyenin binde biri kadar mikroskobik bir yürütme süresi alarak milyonlarca satırı anında atladığını öğreneceksiniz.
Sıra sende
PostgreSQL'in mevcut stoğu 10 birimin altında olan ürünleri nasıl bulmayı planladığını keşfetmek için temel bir EXPLAIN komutu yazın. (Bu adımda ANALİZ'i kullanmayın.)
İpucu göster
Mevcut ifadenin başına EXPLAIN kelimesini eklemeniz yeterli.
3 denemeden sonra çözüm mevcut
Doğru ölçümler alma
Matematiksel olarak tahmin edilmiş bir taslak değil, gerçek bir performans teşhisi (zamanlamalar ve döngüler) istiyoruz.\n1 Ocak 2025'ten önce kaydolmuş TÜM 'müşterilerin' aramasını ('signed_up_on' < '2025-01-01') gerçekten çalıştırarak incelemek için özel ifadeyi kullanın.
İpucu göster
AÇIKLAMA'dan hemen sonra ANALİZ kelimesini ekleyin.
3 denemeden sonra çözüm mevcut