Lompati ke konten utama
Modul 10 · Pelajaran 2 dari 438/57 dalam kursus~15 min
Pelajaran modul (2/4)

JELASKAN dan ANALISIS

Pernahkah Anda bertanya-tanya bagaimana database memilih apakah akan menggunakan indeks bagus yang baru saja Anda buat? Segera setelah Anda menekan Enter pada kueri (misalnya, gabungan panjang dengan grup yang dirantai oleh), Perencana Kueri menghitung lusinan strategi dengan cepat untuk menjalankan kueri dan memilih strategi yang diyakini, secara teori, sebagai yang tercepat.

Namun sebagai pengembang, Anda harus mampu melihat ke dalam pikiran gelap Perencana Kueri.

MENJELASKAN

Untuk mengetahui bagaimana Perencana akan melanjutkan, cukup masukkan kata ajaib EXPLAIN di awal kueri Anda.

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

Hasilnya bukanlah perintah! Sebaliknya, Anda akan melihat rencana dalam keluaran (dengan perkiraan statistik):

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

Ini memberitahu kita:

  1. Perencana akan menggunakan Seq Scan (pembacaan keseluruhan disk secara kasar dan berurutan). Buruk jika pesanannya miliaran.
  2. Diperkirakan ~15 baris akan dikembalikan, dan menghitung "biaya" dalam siklus CPU yang dimuat sebelumnya.

JELASKAN ANALISIS

Meskipun EXPLAIN mengandalkan tebakan algoritmik (berdasarkan statistik global yang dihitung dalam beberapa jam terakhir atas data), EXPLAIN ANALYZE sebenarnya menjalankan kueri secara nyata (dan menunggu hasil logika lengkap), membandingkan waktu sebenarnya yang telah berlalu dalam istilah absolut secara matematis.

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

Hore! Di sini Anda mengetahui bahwa database telah memutuskan untuk menerapkan Pemindaian Indeks pada indeks sekunder idx_orders_cust kami, yang memerlukan waktu eksekusi mikroskopis seperseribu detik, melewati jutaan baris dengan cepat.

Giliranmu

Latihan#sql.m10.l2.e1
Upaya: 0Memuat…

Tulis perintah dasar EXPLAIN untuk mengetahui bagaimana PostgreSQL bermaksud menemukan produk dengan stok saat ini di bawah 10 unit. (Jangan gunakan ANALYZE pada langkah ini.)

Memuat editor…
Tunjukkan petunjuk

Cukup tambahkan kata JELASKAN di awal pernyataan yang ada.

Solusi tersedia setelah 3 upaya

Mendapatkan metrik yang sebenarnya

Latihan#sql.m10.l2.e2
Upaya: 0Memuat…

Kami menginginkan diagnosis kinerja nyata (waktu dan siklus), bukan sketsa yang dapat ditebak secara matematis.\nGunakan pernyataan khusus untuk mempelajari, dengan benar-benar menjalankannya, pencarian SEMUA 'pelanggan' yang mendaftar sebelum tanggal 1 Januari 2025 ('signed_up_on' < '01-01-2025').

Memuat editor…
Tunjukkan petunjuk

Tambahkan kata ANALYZE tepat setelah EXPLAIN.

Solusi tersedia setelah 3 upaya