Ana içeriğe geç
Modül 10 · Ders 2 ders 4Kurstaki 38/57~15 min
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.

SQL
EXPLAIN SELECT * FROM orders WHERE status = 'delivered';

Sonuç emir olmayacak! Bunun yerine çıktıda planı göreceksiniz (tahmini istatistiklerle birlikte):

Code
Seq Scan on orders  (cost=0.00..25.88 rows=15 width=40)
  Filter: (status = 'delivered'::text)

Bu bize şunları söylüyor:

  1. Planlayıcı Sıralı Tarama (tüm diskin kaba, sıralı okunması) kullanacaktır. Milyarlarca sipariş varsa kötü.
  2. 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.

SQL
EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 90;
Code
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 ms

Yaş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

Egzersiz#sql.m10.l2.e1
Denemeler: 0Yükleniyor…

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

Düzenleyici yükleniyor…
İpucu göster

Mevcut ifadenin başına EXPLAIN kelimesini eklemeniz yeterli.

3 denemeden sonra çözüm mevcut

Doğru ölçümler alma

Egzersiz#sql.m10.l2.e2
Denemeler: 0Yükleniyor…

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.

Düzenleyici yükleniyor…
İpucu göster

AÇIKLAMA'dan hemen sonra ANALİZ kelimesini ekleyin.

3 denemeden sonra çözüm mevcut