Prestasi PostgreSQL & Pengoptimuman Pertanyaan · Pelajaran

Mentafsir Nod Pelan

Pelajari cara memahami nod pelan biasa seperti imbasan berjujukan, imbasan indeks, jenis cantuman dan pengisihan.

Pelajaran 2 daripada 412 langkah

Mentafsir Nod Pelan ialah pelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan percuma di CoddyKit. Ini ialah pelajaran 2 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.

Mentafsir Pelan Pertanyaan

Selamat kembali! Dalam pelajaran sebelum ini, anda telah mempelajari cara menggunakan EXPLAIN untuk melihat pelan pelaksanaan pertanyaan. Kini, mari kita teliti cara mentafsir 'nod' yang berbeza dalam pelan ini.

Setiap nod mewakili operasi tertentu yang dilakukan oleh PostgreSQL. Memahaminya penting untuk mengenal pasti kesesakan prestasi.

Apakah Nod Pelan?

Anggap pelan pertanyaan sebagai pepohon, yang setiap dahan dan daunnya ialah 'nod'. Nod ini memberitahu anda:

  • Apakah operasi yang dilakukan (contohnya, mengimbas, mengisih, menggabungkan).
  • Bagaimanakah operasi itu dilakukan (contohnya, secara berjujukan atau menggunakan indeks).
  • Anggaran kos: Berapa banyak masa dan sumber yang dijangka diperlukan oleh PostgreSQL untuk melakukan operasi itu.

Kita akan melihat jenis nod yang paling biasa dan penting.

Imbasan Berjujukan: Bacaan Penuh

Imbasan Berjujukan (sering dipanggil 'Seq Scan') bermaksud PostgreSQL membaca setiap baris dalam jadual dari awal hingga akhir untuk mencari data yang diperlukan.

  • Bila ia berlaku: Untuk jadual kecil, atau apabila membuat pertanyaan terhadap sebahagian besar jadual tanpa indeks yang sesuai.
  • Kesan prestasi: Boleh menjadi perlahan bagi jadual besar, terutamanya jika hanya beberapa baris diperlukan.

Ia seperti menyelak setiap halaman buku untuk mencari satu ayat.

Contoh Seq Scan

Mari lihat cara imbasan berjujukan berfungsi. Kita akan mencipta jadual mudah, kemudian membuat pertanyaan terhadapnya tanpa indeks.

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

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

EXPLAIN SELECT * FROM products WHERE price > 100;

Imbasan Indeks: Carian Bersasar

Imbasan Indeks jauh lebih cekap. PostgreSQL menggunakan indeks untuk mencari baris tertentu yang diperlukan dengan pantas, sama seperti menggunakan indeks dalam buku.

  • Bila ia berlaku: Apabila pertanyaan menggunakan klausa WHERE pada lajur berindeks dan indeks itu cukup selektif.
  • Kesan prestasi: Biasanya jauh lebih pantas daripada imbasan berjujukan untuk pertanyaan selektif pada jadual besar.

Ia membolehkan PostgreSQL terus pergi ke halaman data yang berkaitan.

Contoh Imbasan Indeks

Sekarang, mari tambahkan indeks pada jadual products kita dan perhatikan perubahan dalam pelan pertanyaan.

CREATE INDEX idx_products_price ON products (price);

EXPLAIN SELECT * FROM products WHERE price > 100;

Nod Isihan: Menyusun Data

Nod Isihan muncul apabila PostgreSQL perlu menyusun data, biasanya untuk klausa ORDER BY atau GROUP BY, dan tiada indeks yang boleh menyediakan data dalam susunan yang diperlukan.

  • Bila ia berlaku: ORDER BY secara jelas, atau secara tersirat untuk sesetengah operasi seperti GROUP BY atau kekangan unik.
  • Kesan prestasi: Pengisihan boleh menggunakan banyak CPU dan operasi input/output, terutamanya untuk set data besar.

Jika pengisihan berlaku 'pada cakera' (iaitu tidak muat dalam memori), proses itu menjadi lebih perlahan.

Contoh Nod Isihan

Berikut ialah contoh apabila PostgreSQL perlu mengisih hasil kerana tiada indeks untuk lajur susunan.

EXPLAIN SELECT name, price FROM products ORDER BY name DESC;

Nod Cantuman: Menggabungkan Jadual

Apabila anda mencantumkan dua jadual atau lebih, PostgreSQL menggunakan Nod Cantuman tertentu untuk menggabungkan data. Terdapat tiga jenis utama:

  • Cantuman Gelung Bersarang: Selalunya sesuai untuk jadual dalaman yang kecil atau apabila indeks tersedia.
  • Cantuman Cincangan: Cekap untuk jadual yang lebih besar apabila tiada indeks berguna pada kunci cantuman.
  • Cantuman Gabung: Memerlukan kedua-dua input diisih mengikut kunci cantuman, kemudian menggabungkannya.

Pilihan bergantung pada saiz jadual, indeks yang tersedia dan taburan data.

Contoh Cantuman Gelung Bersarang

Mari cipta satu lagi jadual, kemudian cantumkannya dengan products untuk melihat Cantuman Gelung Bersarang. Ini sering berlaku apabila salah satu sisi cantuman adalah kecil.

CREATE TABLE orders (
  order_id SERIAL PRIMARY KEY,
  product_id INT,
  quantity INT
);

INSERT INTO orders (product_id, quantity) VALUES
(1, 1),
(2, 2),
(1, 3);

EXPLAIN SELECT p.name, o.quantity
FROM products p JOIN orders o ON p.product_id = o.product_id
WHERE o.order_id = 2;

Kenal Pasti Jenis Imbasan

Perhatikan pertanyaan berikut dan petikan pelan pelaksanaannya. Apakah jenis imbasan yang paling mungkin dilakukan pada jadual customers?

EXPLAIN SELECT * FROM customers WHERE age > 30;

Output Pelan Sebahagian (andaikan tiada indeks pada age):

  ->  Seq Scan on customers  (cost=0.00..10.50 rows=3 width=...)

Ulang Kaji: Mentafsir Nod Pelan

Anda telah membuat kemajuan besar dalam memahami prestasi PostgreSQL dengan mempelajari cara mentafsir nod pelan utama!

  • Imbasan Berjujukan: Bacaan penuh jadual, yang boleh menjadi perlahan bagi jadual besar.
  • Imbasan Indeks: Menggunakan indeks untuk mengakses baris secara bersasar, lebih pantas untuk pertanyaan selektif.
  • Isihan: Berlaku apabila data perlu disusun dan tiada indeks yang sesuai.
  • Nod Cantuman: (Gelung Bersarang, Cincangan, Gabung) menggabungkan data daripada beberapa jadual, dan dipilih berdasarkan saiz data serta indeks.

Dalam pelajaran seterusnya, kita akan menggunakan pengetahuan ini untuk mengenal pasti kesesakan prestasi sebenar!

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 “Mentafsir Nod Pelan” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan, termasuk “Mentafsir Nod Pelan”, 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 “Mentafsir Nod Pelan”?

Pelajari cara memahami nod pelan biasa seperti imbasan berjujukan, imbasan indeks, jenis cantuman dan pengisihan. 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 2 daripada 4.

Berapa lamakah pelajaran “Mentafsir Nod Pelan” 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. Pengenalan kepada EXPLAIN dan ANALYZE
  2. Mentafsir Nod Pelan
  3. Mengenal Pasti Kesesakan Prestasi
  4. Membaca Anggaran Kos dan Bilangan Baris EXPLAIN
← Kembali ke Prestasi PostgreSQL & Pengoptimuman Pertanyaan