0Pricing
SQL Interview Prep · Pelajaran

CTE vs Subkueri vs Tabel Sementara

Bandingkan kompromi dalam materialisasi, penggunaan ulang, dan perilaku pengoptimal.

CTE vs Subkueri vs Tabel Sementara adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Tiga Cara Menata Logika Bertahap

Ketika sebuah kueri memerlukan hasil antara, Anda memiliki tiga alat umum: subkueri, CTE, dan tabel sementara. Pewawancara meminta Anda membandingkan ketiganya karena pilihan Anda menunjukkan apakah Anda memahami materialisasi dan perilaku pengoptimal.

Pelajaran ini membangun kerangka pengambilan keputusan yang dapat Anda sampaikan saat berada di bawah tekanan.

Subkueri

Subkueri adalah kueri langsung yang disarangkan di dalam kueri lain, sering kali di bagian FROM, WHERE, atau SELECT. Subkueri merupakan bagian dari pernyataan yang sama dan dilihat oleh pengoptimal sebagai satu kesatuan.

  • Tidak memerlukan nama (tabel turunan memang memerlukan nama alias).
  • Pengoptimal bebas menggabungkannya ke dalam kueri luar.
  • Menjadi panjang dan sulit dibaca jika disarangkan terlalu dalam.
SELECT *
FROM (
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
) t
WHERE t.total > 1000;

CTE

CTE adalah subkueri bernama dalam blok WITH, yang cakupannya terbatas pada satu pernyataan. CTE lebih mudah dibaca daripada subkueri yang disarangkan terlalu dalam dan dapat direferensikan beberapa kali.

  • Memiliki nama, sehingga maksudnya terdokumentasi.
  • Dapat direferensikan lebih dari sekali dalam pernyataan yang sama.
  • Ruang lingkupnya tetap terbatas pada satu pernyataan, lalu hilang.
WITH spend AS (
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
)
SELECT *
FROM spend
WHERE total > 1000;

Tabel Sementara

Tabel sementara adalah tabel fisik nyata yang berlaku selama sesi (atau transaksi). Anda mengisinya dengan satu pernyataan, lalu menguerikannya dalam pernyataan-pernyataan terpisah berikutnya.

  • Berlangsung di beberapa pernyataan dalam satu sesi.
  • Dapat diberi indeks dan dikumpulkan statistiknya.
  • Memerlukan operasi I/O disk dan pembersihan secara eksplisit.
CREATE TEMP TABLE spend AS
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id;

SELECT * FROM spend WHERE total > 1000;

Materialisasi: Perbedaan Utama

Konsep utama yang diselidiki pewawancara adalah materialisasi: apakah hasil antara ditulis secara fisik di suatu tempat.

  • Subkueri dan CTE biasanya tidak dimaterialisasi; pengoptimal sering menanamkannya langsung.
  • Tabel sementara selalu dimaterialisasi ke penyimpanan.
  • Beberapa basis data memungkinkan Anda memaksa atau mencegah materialisasi CTE dengan petunjuk.

Pembatas Pengoptimal dan Jebakan PostgreSQL Lama

Secara historis, PostgreSQL memperlakukan setiap CTE sebagai pembatas pengoptimalan, mematerialisasinya dan mencegah predikat didorong ke bawah. Sejak PostgreSQL 12, CTE sederhana non-rekursif yang direferensikan sekali ditanamkan langsung secara bawaan, dengan petunjuk MATERIALIZED dan NOT MATERIALIZED untuk menimpanya.

Menyebutkan nuansa ini merupakan sinyal kuat bahwa Anda memiliki kemampuan tingkat senior.

WITH spend AS NOT MATERIALIZED (
    SELECT customer_id, SUM(amount) AS total
    FROM orders GROUP BY customer_id
)
SELECT * FROM spend WHERE total > 1000;

Penggunaan Ulang dalam Satu Pernyataan

Jika Anda mereferensikan hasil antara yang sama beberapa kali dalam satu pernyataan, CTE dapat lebih rapi daripada mengulangi subkueri. Namun, berhati-hatilah: CTE yang ditanamkan langsung mungkin dihitung ulang pada setiap referensi.

Jika penghitungan ulang memerlukan biaya besar, memaksa materialisasi (atau menggunakan tabel sementara) mencegah pekerjaan yang sama dilakukan dua kali.

Penggunaan Ulang Antarpernyataan

CTE dan subkueri hanya berlaku selama satu pernyataan. Jika Anda memerlukan hasil yang sama dalam beberapa kueri terpisah, tabel sementara merupakan alat yang tepat.

Contoh umum: ETL atau laporan yang terdiri dari beberapa langkah, ketika Anda membuat satu kumpulan data penyiapan lalu menjalankan beberapa analisis terhadapnya. Memberi indeks pada tabel sementara kemudian dapat mempercepat setiap kueri lanjutan.

Pengindeksan dan Statistik

Hanya tabel sementara yang dapat memiliki indeks dan statistik terbaru. Untuk himpunan hasil antara yang sangat besar dan digabungkan berkali-kali, hal ini dapat menjadi faktor penentu.

  • CTE/subkueri: pengoptimal memperkirakan berdasarkan tabel yang mendasarinya.
  • Tabel sementara: Anda dapat menjalankan ANALYZE pada tabel tersebut dan menambahkan indeks yang disesuaikan dengan penggabungan berikutnya.

Jadi, untuk hasil berukuran besar yang banyak digunakan ulang, tabel sementara mungkin memberikan kinerja lebih baik meskipun memerlukan langkah tambahan.

Kerangka Pengambilan Keputusan

Berikut jawaban ringkas untuk wawancara:

  • Subkueri: digunakan sekali, dangkal, dan keterbacaannya sudah memadai.
  • CTE: meningkatkan keterbacaan atau direferensikan beberapa kali dalam satu pernyataan.
  • Tabel sementara: digunakan ulang di beberapa pernyataan, berukuran sangat besar, atau memerlukan indeks/statistik.

Gunakan CTE sebagai pilihan bawaan untuk kejelasan; pilih tabel sementara ketika materialisasi atau penggunaan ulang antarpernyataan benar-benar memberikan manfaat.

Cara Menjelaskan Kompromi

Hindari pernyataan mutlak seperti 'CTE selalu lebih lambat.' Sebaliknya, katakan: CTE dan subkueri biasanya ditanamkan langsung, jadi keduanya terutama berguna untuk keterbacaan; tabel sementara dimaterialisasi dan layak digunakan ketika saya menggunakan kembali hasil berukuran besar di beberapa pernyataan atau memerlukan indeks.

Mengakui bahwa perilaku tersebut bergantung pada mesin (dan pada versi untuk PostgreSQL) menunjukkan pemahaman yang mendalam.

Pemeriksaan Cepat

Pilih skenario ketika tabel sementara jelas merupakan pilihan yang lebih baik.

Rekapitulasi: CTE vs Subkueri vs Tabel Sementara

Pilihan tersebut bergantung pada materialisasi dan cakupan.

  • Subkueri dan CTE: biasanya ditanamkan langsung, cakupannya satu pernyataan, dan dipilih demi keterbacaan.
  • CTE menambahkan penamaan dan penggunaan ulang dalam satu pernyataan.
  • Tabel sementara: selalu dimaterialisasi, berlaku di beberapa pernyataan, dan dapat diberi indeks.
  • PostgreSQL 12+ menanamkan CTE sederhana secara langsung; gunakan petunjuk MATERIALIZED untuk mengendalikannya.

Berikutnya: merapikan kueri bertingkat yang rumit menjadi CTE yang rapi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “CTE vs Subkueri vs Tabel Sementara” gratis?

Ya — teks lengkap “CTE vs Subkueri vs Tabel Sementara” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “CTE vs Subkueri vs Tabel Sementara”?

Bandingkan kompromi dalam materialisasi, penggunaan ulang, dan perilaku pengoptimal. Kamu berlatih SQL Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Interview Prep?

Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “CTE vs Subkueri vs Tabel Sementara” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Interview Prep ini?

Ya. Setiap pelajaran SQL Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menulis CTE Pertama Anda
  2. Merangkai Beberapa CTE
  3. CTE vs Subkueri vs Tabel Sementara
  4. Memfaktorkan Ulang Kueri Bersarang Menjadi CTE
← Kembali ke SQL Interview Prep