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:
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()'
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 );
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;
Indeks Terwujud Paparan:
CREATE INDEX loc_event_idx ON loc_event (event_slug, end_time, location_id);
Pandangan Terwujud Pertanyaan:
SELECT * FROM loc_event WHERE event_slug = 'test_1' AND end_time >= '2014-10-30 14:04:06 -0400'::timestamptz;
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!