Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan Postgres pada Tatasusunan jsonb untuk Prestasi yang Dipertingkatkan?

Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan Postgres pada Tatasusunan jsonb untuk Prestasi yang Dipertingkatkan?

Patricia Arquette
Lepaskan: 2025-01-06 14:06:41
asal
372 orang telah melayarinya

How Can I Optimize Postgres Queries on jsonb Arrays for Improved Performance?

Menyiasat Struktur dalam Tatasusunan menggunakan Postgres jsonb

Tatasusunan Jsonb boleh menyimpan data berstruktur dalam Postgres, memudahkan pertanyaan dengan objek bersarang. Walau bagaimanapun, mengakses nilai tatasusunan dengan indeks berjujukan boleh menghasilkan imbasan berjujukan.

Pengindeksan yang Betul untuk Prestasi Pertanyaan Yang Dipertingkat

Untuk mengoptimumkan pertanyaan yang melibatkan perbandingan tatasusunan jsonb, khususnya pertanyaan seperti satu yang disediakan (menyemak acara dalam julat masa tertentu), langkah berikut boleh diambil:

  • Gunakan Kelas Operator jsonb_path_ops: Ini memastikan pemadanan yang cekap untuk perbandingan jsonb kompleks yang melibatkan lebih besar daripada atau kurang daripada operator.

Pendekatan Asas (Postgres 12 dan Kemudian)

SELECT l.*
FROM   locations l
WHERE  l.events @? '$[*] ? (@.event_slug == "test_1")
                         ? (@.end_time.datetime() < "2014-10-13".datetime()'
Salin selepas log masuk

Pendekatan Lanjutan Menggunakan Pandangan Terwujud

Jika pertanyaan rumit masih menghasilkan prestasi yang lemah, pertimbangkan untuk mencipta paparan terwujud dengan atribut relevan yang dinormalisasi:

  • Buat Data Acara Jenis:

    CREATE TYPE event_type AS (
     , event_slug  text
     , start_time  timestamp
     , end_time    timestamp
    );
    Salin selepas log masuk
  • Buat Paparan Terwujud:

    CREATE MATERIALIZED VIEW loc_event AS
    SELECT l.location_id, e.event_slug, e.end_time  -- start_time not needed
    FROM   locations l, jsonb_populate_recordset(null::event_type, l.events) e;
    Salin selepas log masuk
  • Indeks Terwujud Paparan:

    CREATE INDEX loc_event_idx ON loc_event (event_slug, end_time, location_id);
    Salin selepas log masuk
  • Pandangan Terwujud Pertanyaan:

    SELECT *
    FROM   loc_event
    WHERE  event_slug = 'test_1'
    AND    end_time  >= '2014-10-30 14:04:06 -0400'::timestamptz;
    Salin selepas log masuk

    Dengan menggunakan operator yang betul kelas dan mempertimbangkan pendekatan lanjutan seperti pandangan terwujud, anda boleh mencapai prestasi optimum untuk pertanyaan yang melibatkan perbandingan pada tatasusunan jsonb data.

    Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan Postgres pada Tatasusunan jsonb untuk Prestasi yang Dipertingkatkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan