PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi · Pelajaran

Menganalisis Pelan Pertanyaan dengan EXPLAIN

Dalami penggunaan EXPLAIN dan EXPLAIN ANALYZE untuk memahami cara PostgreSQL melaksanakan pertanyaan dan menggunakan indeks.

Pelajaran 1 daripada 411 langkah

Menganalisis Pelan Pertanyaan dengan EXPLAIN ialah pelajaran PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi merangkumi sejumlah 4 pelajaran.

Apakah Pelan Pertanyaan?

Apabila anda meminta data daripada PostgreSQL, PostgreSQL tidak terus mengambilnya. Mula-mula, PostgreSQL menentukan cara terbaik untuk mendapatkan data tersebut. 'Cara terbaik' ini dipanggil pelan pertanyaan.

Memahami pelan pertanyaan amat penting untuk menala prestasi pangkalan data. Pelan ini membantu anda melihat cara PostgreSQL melaksanakan pertanyaan anda dan, yang lebih penting, sebab sesetengah pertanyaan menjadi perlahan.

Kenali EXPLAIN

PostgreSQL menyediakan perintah EXPLAIN untuk memaparkan pelan pelaksanaan bagi mana-mana pernyataan SQL. Ia seperti mengintai di sebalik tabir untuk melihat strategi pangkalan data.

EXPLAIN sebenarnya tidak menjalankan pertanyaan anda. Sebaliknya, ia menjana pelan anggaran berdasarkan statistik jadual. Pelan ini merangkumi butiran seperti kaedah capaian yang dipilih (cara data dibaca) dan susunan cantuman.

Output EXPLAIN Asas

Mari lihat EXPLAIN berfungsi dengan pertanyaan mudah. Kita akan mencipta jadual kecil dan kemudian meminta pelannya.

Perhatikan Seq Scan, yang bermaksud 'imbasan berjujukan' dan membaca setiap baris jadual.

CREATE TABLE products (
  id SERIAL PRIMARY KEY,
  name VARCHAR(100)
);

INSERT INTO products (name) VALUES
  ('Laptop'),
  ('Mouse'),
  ('Keyboard'),
  ('Monitor');

EXPLAIN SELECT * FROM products WHERE name = 'Mouse';

Memahami Kos dan Baris

Output daripada EXPLAIN mungkin kelihatan rumit, tetapi dua metrik penting ialah kos dan baris:

  • kos: Ukuran anggaran perbelanjaan pelaksanaan pertanyaan. Ia mempunyai dua nombor: {startup_cost}..{total_cost}. Kos permulaan ialah kos sebelum baris pertama dikembalikan; kos keseluruhan ialah kos bagi keseluruhan operasi. Nilai ini relatif, bukannya unit masa mutlak.
  • baris: Anggaran bilangan baris yang akan dikeluarkan oleh nod pelan.

Kos yang lebih rendah biasanya lebih baik, tetapi sentiasa pertimbangkan anggaran baris untuk mendapatkan ketepatan.

Jenis Imbasan: Seq berbanding Indeks

Salah satu perkara pertama yang perlu dicari dalam pelan pertanyaan ialah jenis imbasan. Jenis ini memberitahu anda cara PostgreSQL mengakses data:

  • Imbasan Berjujukan (Seq Scan): Membaca setiap baris dalam jadual satu demi satu. Kaedah ini cekap untuk jadual kecil atau apabila anda memerlukan kebanyakan data jadual.
  • Imbasan Indeks: Menggunakan indeks untuk mencari baris tertentu dengan pantas. Kaedah ini biasanya jauh lebih pantas untuk pertanyaan yang menapis sebahagian kecil daripada jadual besar.

Pilihan bergantung pada pertanyaan dan struktur jadual anda.

EXPLAIN ANALYZE: Keadaan Sebenar

Walaupun EXPLAIN menyediakan anggaran, EXPLAIN ANALYZE benar-benar menjalankan pertanyaan dan mengumpulkan statistik dunia sebenar. Ini amat berkuasa untuk mengenal pasti kesesakan prestasi.

Perintah ini menambahkan masa pelaksanaan sebenar dan kiraan baris kepada pelan, membolehkan anda membandingkan anggaran dengan keadaan sebenar. Perbezaan besar sering menunjukkan statistik jadual yang lapuk atau pelan yang dipilih dengan kurang baik.

EXPLAIN ANALYZE dalam Tindakan

Mari cipta jadual yang lebih besar dan jalankan EXPLAIN ANALYZE pada pertanyaan yang berkemungkinan melakukan imbasan berjujukan. Beri perhatian kepada masa sebenar dan baris.

Kita akan mencipta 1000 pengguna dan membuat pertanyaan untuk julat umur tertentu.

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  email VARCHAR(100) UNIQUE,
  age INT
);

INSERT INTO users (email, age)
SELECT
  'user' || i || '@example.com',
  (i % 50) + 18 -- Ages from 18 to 67
FROM generate_series(1, 1000) s(i);

EXPLAIN ANALYZE SELECT * FROM users WHERE age > 60;

Melihat Faedah Indeks

Sekarang, mari cipta indeks pada lajur age daripada jadual users kita. Kemudian, kita akan menjalankan semula pertanyaan EXPLAIN ANALYZE yang sama.

Anda sepatutnya melihat perubahan ketara pada pelan, kemungkinan daripada Seq Scan kepada Index Scan, serta pengurangan masa pelaksanaan sebenar.

CREATE INDEX idx_users_age ON users (age);

EXPLAIN ANALYZE SELECT * FROM users WHERE age > 60;

Membaca Pelan Kompleks

Pelan pertanyaan boleh menjadi sangat kompleks apabila melibatkan berbilang operasi. Berikut ialah beberapa petua untuk membacanya:

  • Baca dari Bawah ke Atas: PostgreSQL biasanya memproses operasi paling dalam (di bahagian bawah) terlebih dahulu.
  • Perhatikan Indentasi: Indentasi menunjukkan operasi bersarang. Operasi dalaman memberikan input kepada induknya.
  • Kenal Pasti Nod Mahal: Cari nod dengan total_cost atau actual time yang tinggi. Nod ini ialah kesesakan anda.
  • Bandingkan Anggaran dengan Nilai Sebenar: Perbezaan ketara dalam rows antara nilai estimated dan actual boleh menunjukkan statistik yang tidak tepat atau pelan yang mengelirukan.

Analisis Pelan Ini!

Pertimbangkan output EXPLAIN berikut untuk pertanyaan pada jadual bernama orders. Apakah yang dapat kita ketahui tentang cara pertanyaan ini akan dilaksanakan?

Seq Scan on orders  (cost=0.00..10.50 rows=5 width=100)
  Filter: (amount > 100)

Imbas Kembali: Rancang Pertanyaan Anda

Tahniah! Anda telah mendalami analisis pelan pertanyaan PostgreSQL.

  • EXPLAIN memaparkan pelan pertanyaan anggaran.
  • EXPLAIN ANALYZE menjalankan pertanyaan dan memaparkan statistik pelaksanaan sebenar.
  • Cari jenis imbasan (Seq Scan, Index Scan) untuk memahami capaian data.
  • Bandingkan kos dan baris anggaran dengan nilai sebenar untuk mencari kesesakan.
  • Baca pelan dari bawah ke atas untuk mengikuti aliran pelaksanaan.

Menguasai EXPLAIN ialah asas penting dalam penalaan prestasi PostgreSQL. Teruskan berlatih!

Percuma untuk bermula

Pelajari PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi 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
11
Pelajaran
44

Soalan Lazim

Adakah pelajaran “Menganalisis Pelan Pertanyaan dengan EXPLAIN” percuma?

Ya — teks penuh “Menganalisis Pelan Pertanyaan dengan EXPLAIN” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi, tingkat taraf kepada CoddyKit PRO. Kursus PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Menganalisis Pelan Pertanyaan dengan EXPLAIN”?

Dalami penggunaan EXPLAIN dan EXPLAIN ANALYZE untuk memahami cara PostgreSQL melaksanakan pertanyaan dan menggunakan indeks. Anda berlatih PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi 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 PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi?

Tiada pengalaman terdahulu diperlukan. Pembelajaran PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi 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 1 daripada 4.

Berapa lamakah pelajaran “Menganalisis Pelan Pertanyaan dengan EXPLAIN” 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 PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi ini?

Ya. Setiap pelajaran PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi 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. Menganalisis Pelan Pertanyaan dengan EXPLAIN
  2. Memantau Penggunaan Indeks
  3. Pengindeksan Semula dan Penyelenggaraan Indeks
  4. Menala Kos Indeks dengan ANALYZE dan Statistik
← Kembali ke PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi