Prestasi PostgreSQL & Pengoptimuman Pertanyaan · Pelajaran

Subpertanyaan berbanding CTE berbanding Cantuman

Bandingkan subpertanyaan, Ungkapan Jadual Biasa (CTE) dan cantuman untuk pembinaan pertanyaan yang optimum.

Pelajaran 3 daripada 412 langkah

Subpertanyaan berbanding CTE berbanding Cantuman ialah pelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Prestasi PostgreSQL & Pengoptimuman Pertanyaan merangkumi sejumlah 4 pelajaran.

Pengenalan kepada Pembinaan Pertanyaan

Dalam pelajaran ini, kita akan meneroka tiga cara asas untuk menggabungkan dan menstrukturkan data dalam PostgreSQL: Subpertanyaan, Ungkapan Jadual Biasa (CTE) dan Gabungan.

Memahami perbezaan serta kes penggunaan yang optimum adalah penting untuk menulis SQL yang cekap dan mudah dibaca.

Gabungan: Asas Utama

Anda sudah biasa dengan gabungan! Gabungan ialah cara utama untuk menggabungkan baris daripada dua jadual atau lebih berdasarkan lajur berkaitan antara jadual tersebut.

  • Tujuan: Memautkan data berkaitan merentas jadual.
  • Kebolehbacaan: Selalunya jelas untuk hubungan langsung.
  • Prestasi: Dioptimumkan dengan sangat baik oleh PostgreSQL untuk menggabungkan set data yang besar.

Apakah Subpertanyaan?

Subpertanyaan (atau pertanyaan dalaman) ialah pertanyaan yang bersarang dalam pertanyaan SQL yang lain. Subpertanyaan boleh mengembalikan satu nilai (skalar), satu baris, satu lajur atau satu jadual.

  • Kedudukan: Dalam klausa SELECT, FROM, WHERE atau HAVING.
  • Kes Penggunaan: Menapis dengan IN/EXISTS, mengira nilai agregat untuk perbandingan atau menyediakan jadual terbitan.

Subpertanyaan dalam Tindakan

Berikut ialah contoh mudah apabila subpertanyaan membantu mencari produk yang harganya melebihi purata. Perhatikan bahawa pertanyaan dalaman dijalankan terlebih dahulu.

CREATE TABLE products (
  product_id SERIAL PRIMARY KEY,
  product_name VARCHAR(50),
  price DECIMAL(10, 2)
);

INSERT INTO products (product_name, price) VALUES
('Laptop', 1200.00),
('Mouse', 25.00),
('Keyboard', 75.00),
('Monitor', 300.00),
('Webcam', 50.00);

SELECT product_name, price
FROM products
WHERE price > (SELECT AVG(price) FROM products);

DROP TABLE products;

Apakah CTE?

Ungkapan Jadual Biasa (CTE), yang ditakrifkan dengan klausa WITH, mencipta set hasil sementara bernama yang boleh dirujuk dalam satu pernyataan SQL.

  • Tujuan: Meningkatkan kebolehbacaan, menyusun pertanyaan kompleks dan membolehkan rekursi.
  • Skop: Hanya tersedia untuk pertanyaan yang mengikuti klausa WITH secara langsung.
  • Kebolehbacaan: Memecahkan logik kompleks kepada langkah yang teratur dan mudah dibaca.

CTE dalam Tindakan

Mari kita tulis semula contoh sebelumnya menggunakan CTE. Perhatikan cara ia mentakrifkan "average_price" terlebih dahulu, lalu menjadikan pertanyaan utama lebih jelas.

CREATE TABLE products (
  product_id SERIAL PRIMARY KEY,
  product_name VARCHAR(50),
  price DECIMAL(10, 2)
);

INSERT INTO products (product_name, price) VALUES
('Laptop', 1200.00),
('Mouse', 25.00),
('Keyboard', 75.00),
('Monitor', 300.00),
('Webcam', 50.00);

WITH AverageProductPrice AS (
  SELECT AVG(price) AS avg_price
  FROM products
)
SELECT p.product_name, p.price
FROM products p, AverageProductPrice app
WHERE p.price > app.avg_price;

DROP TABLE products;

Memilih Gabungan

Gabungan ialah pilihan utama apabila anda perlu menggabungkan data daripada jadual berbeza yang mempunyai hubungan langsung dan logik.

  • Hubungan Langsung: Apabila jadual dipautkan oleh kunci asing.
  • Prestasi: Dioptimumkan dengan sangat baik oleh perancang untuk menggabungkan set data besar dengan cekap.
  • Set Hasil: Mencipta satu set hasil yang lebih lebar daripada baris yang sepadan.

Gabungan selalunya memberikan prestasi terbaik untuk menggabungkan jadual besar.

Memilih Subpertanyaan

Subpertanyaan berguna untuk penapisan tertentu atau pengiraan nilai yang bergantung pada data pertanyaan utama, selalunya bertindak sebagai satu nilai atau senarai.

  • Nilai Skalar: Apabila anda memerlukan satu nilai (contohnya, WHERE price > (SELECT AVG(price))).
  • Penapisan: Dengan klausa IN, NOT IN, EXISTS, NOT EXISTS.
  • Jadual Terbitan: Dalam klausa FROM untuk set hasil sementara tanpa nama.

Subpertanyaan kadangkala kurang mudah dibaca untuk logik yang kompleks.

Memilih CTE

CTE sangat sesuai apabila anda perlu memecahkan pertanyaan kompleks kepada langkah yang teratur dan mudah dibaca, atau mengendalikan struktur data rekursif.

  • Kebolehbacaan: Memudahkan pemahaman logik berbilang langkah.
  • Rekursi: Penting untuk membuat pertanyaan terhadap data berhierarki atau seperti graf.
  • Penggunaan Semula: CTE boleh dirujuk beberapa kali dalam pertanyaan utama yang sama.

CTE selalunya lebih digemari berbanding subpertanyaan kompleks kerana lebih jelas.

Prestasi: Ia Rumit!

Selalunya, pertanyaan yang ditulis dengan subpertanyaan boleh ditulis semula sebagai gabungan atau CTE, dan begitu juga sebaliknya. Pengoptimum PostgreSQL memang pintar!

  • Peranan Pengoptimum: Pengoptimum sering mengubah binaan ini secara dalaman menjadi pelan pelaksanaan yang paling cekap.
  • Utamakan Kebolehbacaan: Utamakan kod yang jelas dan mudah diselenggara.
  • EXPLAIN ANALYZE: Sentiasa gunakannya untuk benar-benar memahami kesan prestasi pendekatan yang dipilih, bukannya membuat andaian.

Bandingkan dan Bezakan

Pertimbangkan senario berikut. Binaan SQL manakah yang secara amnya paling sesuai untuk setiap situasi?

Ulang Kaji: Membina Pertanyaan Optimum

Anda telah belajar membezakan antara gabungan, Subpertanyaan dan CTE:

  • Gabungan: Terbaik untuk hubungan langsung antara jadual dan penggabungan set data besar.
  • Subpertanyaan: Sesuai untuk nilai skalar, penapisan IN/EXISTS dan jadual terbitan.
  • CTE: Cemerlang untuk kebolehbacaan, logik berbilang langkah dan pertanyaan rekursif.

Ingat untuk mengutamakan kebolehbacaan dan gunakan EXPLAIN ANALYZE bagi mengesahkan prestasi!

Percuma untuk bermula

Pelajari SQL dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
22
Pelajaran
88

Soalan Lazim

Adakah pelajaran “Subpertanyaan berbanding CTE berbanding Cantuman” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan, termasuk “Subpertanyaan berbanding CTE berbanding Cantuman”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Prestasi PostgreSQL & Pengoptimuman Pertanyaan merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Subpertanyaan berbanding CTE berbanding Cantuman”?

Bandingkan subpertanyaan, Ungkapan Jadual Biasa (CTE) dan cantuman untuk pembinaan pertanyaan yang optimum. Anda berlatih Prestasi PostgreSQL & Pengoptimuman Pertanyaan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Prestasi PostgreSQL & Pengoptimuman Pertanyaan?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Subpertanyaan berbanding CTE berbanding Cantuman” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan ini?

Ya. Setiap pelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Memahami Algoritma Cantuman
  2. Menulis Semula Cantuman Kompleks
  3. Subpertanyaan berbanding CTE berbanding Cantuman
  4. Mengoptimumkan Cantuman LATERAL dan Carian Berkorelasi
← Kembali ke Prestasi PostgreSQL & Pengoptimuman Pertanyaan