PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi · Pelajaran

Menskalakan Indeks dengan Pembahagian

Pelajari cara indeks berinteraksi dengan jadual terbahagi serta strategi untuk mencipta indeks setempat dan global yang berkesan.

Pelajaran 1 daripada 411 langkah

Menskalakan Indeks dengan Pembahagian 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.

Sinergi Pengindeksan & Pembahagian

Apabila mengendalikan set data yang benar-benar besar dalam PostgreSQL, menggabungkan pengindeksan dan pembahagian bukan sekadar pilihan—ia sering menjadi keperluan untuk mengekalkan prestasi.

Pelajaran ini meneroka cara indeks berinteraksi dengan jadual berpartisi serta strategi untuk mencipta indeks yang boleh diskalakan dengan berkesan seiring pembahagian data anda.

Memahami Indeks Setempat

Indeks setempat ialah indeks yang dicipta pada satu partisi individu bagi jadual berpartisi. Apabila anda mencipta indeks pada jadual induk yang berpartisi, PostgreSQL secara automatik mencipta indeks berasingan untuk setiap partisinya.

  • Setiap indeks setempat hanya meliputi data dalam partisi khususnya.
  • Indeks ini diurus secara tersirat apabila anda menambah atau membuang partisi.
  • Ini ialah jenis indeks yang paling biasa dan selalunya paling cekap untuk jadual berpartisi.

Mencipta Indeks Setempat

Mencipta indeks setempat adalah mudah. Anda hanya perlu mencipta indeks pada jadual induk yang berpartisi. PostgreSQL mengendalikan penciptaan indeks individu untuk setiap partisi anak secara automatik.

Cuba jalankan contoh ini:

CREATE TABLE sensor_data (
    id SERIAL,
    log_time TIMESTAMPTZ NOT NULL,
    value NUMERIC
) PARTITION BY RANGE (log_time);

CREATE TABLE sensor_data_y2023 PARTITION OF sensor_data
FOR VALUES FROM ('2023-01-01 00:00:00') TO ('2024-01-01 00:00:00');

-- This creates local indexes on all current and future partitions
CREATE INDEX idx_sensor_logtime ON sensor_data (log_time);

Kelebihan Indeks Setempat

Indeks setempat amat berkesan apabila pertanyaan melibatkan kunci partisi. Sebabnya adalah seperti berikut:

  • Pemangkasan Partisi: Perancang pertanyaan PostgreSQL boleh mengenal pasti dan mengimbas hanya partisi yang berkaitan berdasarkan klausa `WHERE` pertanyaan anda dengan cepat.
  • Indeks Lebih Kecil: Setiap indeks setempat lebih kecil kerana hanya mengandungi sebahagian data, lalu menghasilkan carian yang lebih pantas dalam sesuatu partisi.
  • I/O Berkurang: Kurang data perlu dibaca daripada cakera, sekali gus meningkatkan kelajuan pertanyaan.

Memahami Indeks Global

Indeks global, tidak seperti indeks setempat, merentasi semua partisi bagi jadual berpartisi. Ia ialah satu indeks monolitik yang berfungsi hampir seperti indeks pada jadual biasa yang tidak berpartisi.

  • Indeks ini tidak terikat pada mana-mana partisi tertentu.
  • Kemas kini pada mana-mana partisi akan mempengaruhi satu indeks global tersebut.
  • Indeks ini kurang biasa digunakan untuk pengoptimuman pertanyaan umum pada jadual berpartisi.

Mencipta Indeks Global

Untuk mencipta indeks global, biasanya anda menggunakan kata kunci ONLY apabila menentukan jadual induk. Ini memberitahu PostgreSQL supaya mencipta indeks terus pada jadual induk, bukannya secara tersirat pada setiap jadual anak.

Indeks global sering digunakan untuk menguatkuasakan kekangan unik merentas seluruh jadual berpartisi pada lajur yang bukan kunci partisi.

Cuba jalankan contoh ini:

-- Assuming sensor_data is already partitioned
-- Create a unique global index across all partitions
CREATE UNIQUE INDEX idx_sensor_id_global ON ONLY sensor_data (id);

Pertimbangan Indeks Global

Walaupun indeks global mempunyai kegunaannya, indeks ini disertai pertukaran tertentu:

  • Overhed Penyelenggaraan: Penyisipan, kemas kini atau pemadaman pada mana-mana partisi memerlukan kemas kini pada satu indeks global, yang boleh menjadi lebih perlahan.
  • Tiada Manfaat Pemangkasan Partisi: Pertanyaan yang menggunakan indeks global tidak mendapat manfaat daripada pemangkasan partisi pada indeks itu sendiri kerana indeks tersebut merangkumi semua data.
  • Kes Penggunaan: Paling sesuai untuk kekangan unik pada lajur bukan kunci partisi, atau pertanyaan yang kerap mencapai lajur bukan kunci partisi merentas seluruh set data.

Setempat berbanding Global: Bila?

Pemilihan antara indeks setempat dan global bergantung pada beban kerja anda:

  • Indeks Setempat: Sesuai apabila pertanyaan kerap menapis data menggunakan kunci partisi (contohnya, julat tarikh atau kategori tertentu). Indeks ini memanfaatkan pemangkasan partisi untuk mendapatkan kelajuan.
  • Indeks Global: Pertimbangkan indeks ini untuk menguatkuasakan kekangan unik pada lajur yang bukan kunci partisi, atau untuk pertanyaan yang kerap mencapai lajur bukan kunci partisi merentas seluruh jadual.

Dalam kebanyakan keadaan, indeks setempat ialah pilihan yang lebih baik untuk prestasi pada jadual berpartisi.

Senario Contoh Praktikal

Bayangkan jadual orders dipartisi berdasarkan order_date.

  • Indeks setempat pada order_date akan sangat cekap untuk pertanyaan seperti WHERE order_date BETWEEN X AND Y kerana pemangkasan partisi.
  • Indeks global pada customer_id akan cekap untuk WHERE customer_id = Z merentas semua pesanan, terutamanya jika anda perlu mencari semua pesanan bagi seseorang pelanggan tanpa mengira tarikh.

Kuncinya ialah menyelaraskan strategi pengindeksan anda dengan corak pertanyaan yang paling kerap digunakan.

Pengindeksan Jadual Berpartisi

Pertimbangkan jadual sales yang besar dan dipartisi berdasarkan sale_date. Jenis indeks yang manakah secara umumnya lebih cekap untuk pertanyaan seperti SELECT * FROM sales WHERE sale_date BETWEEN '2023-01-01' AND '2023-01-31' AND product_id = 123;?

Ringkasan Penskalaan Indeks

Dalam pelajaran ini, kami meneroka cara indeks berinteraksi dengan jadual berpartisi. Anda telah mempelajari tentang:

  • Indeks setempat: Dicipta untuk setiap partisi, sesuai untuk pertanyaan yang menggunakan kunci partisi dan mendapat manfaat daripada pemangkasan partisi.
  • Indeks global: Merangkumi semua partisi, berguna untuk kekangan unik atau pertanyaan pada lajur yang bukan kunci partisi di seluruh jadual, tetapi memerlukan lebih banyak penyelenggaraan.

Menguasai hubungan antara pemartisian dan pengindeksan adalah penting untuk mencapai prestasi tinggi dalam pangkalan data PostgreSQL berskala besar.

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 “Menskalakan Indeks dengan Pembahagian” percuma?

Ya — teks penuh “Menskalakan Indeks dengan Pembahagian” 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 “Menskalakan Indeks dengan Pembahagian”?

Pelajari cara indeks berinteraksi dengan jadual terbahagi serta strategi untuk mencipta indeks setempat dan global yang berkesan. 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 “Menskalakan Indeks dengan Pembahagian” 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. Menskalakan Indeks dengan Pembahagian
  2. Memilih Strategi Indeks/Pembahagian
  3. Kajian Kes Dunia Sebenar
  4. Indeks BRIN untuk Jadual Berpartisi Besar
← Kembali ke PostgreSQL Lanjutan: Pengindeksan, Pembahagian dan Replikasi