Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengindeks Tatasusunan JSON dengan Cekap dalam PostgreSQL untuk Mendapatkan Elemen Lebih Pantas?

Bagaimana untuk Mengindeks Tatasusunan JSON dengan Cekap dalam PostgreSQL untuk Mendapatkan Elemen Lebih Pantas?

Mary-Kate Olsen
Lepaskan: 2025-01-21 04:21:09
asal
209 orang telah melayarinya

Indeks tatasusunan JSON dengan cekap dalam PostgreSQL untuk mendapatkan semula elemen yang lebih pantas

Mengenal pasti dan mendapatkan semula elemen dengan pantas dalam tatasusunan JSON dalam jadual PostgreSQL boleh mencabar. Untuk prestasi optimum, adalah penting untuk memahami teknologi pengindeksan yang sesuai untuk keperluan data dan pertanyaan khusus anda.

How to Efficiently Index JSON Arrays in PostgreSQL for Faster Element Retrieval?

Menggunakan JSONB dalam PostgreSQL 9.4

PostgreSQL 9.4 memperkenalkan jsonb jenis data JSON binari, yang sangat meningkatkan kemungkinan pengindeksan. Gunakan jsonb untuk mencipta indeks GIN secara langsung pada tatasusunan JSON.

<code class="language-sql">CREATE TABLE tracks (id serial, artists jsonb);
CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (artists);</code>
Salin selepas log masuk

Ini membolehkan pertanyaan yang boleh menggunakan indeks GIN, contohnya:

<code class="language-sql">SELECT * FROM tracks WHERE artists @> '["The Dirty Heads"]';</code>
Salin selepas log masuk

di mana @> mewakili pengendali "mengandungi" jsonb.

Sebagai alternatif, anda boleh menggunakan kelas operator GIN jsonb_path_ops (bukan lalai, biasanya lebih kecil dan lebih pantas):

<code class="language-sql">CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (artists jsonb_path_ops);</code>
Salin selepas log masuk

Optimumkan untuk nilai nama unik

Jika lajur artists anda hanya mengandungi tatasusunan nilai yang dinamakan secara unik, adalah lebih cekap untuk menyimpan nilai sebagai primitif teks JSON, bukannya objek. Ini menghapuskan keperluan untuk kunci berlebihan.

<code class="language-sql">CREATE TABLE tracks (id serial, artistnames jsonb);
INSERT INTO tracks VALUES (2, '["The Dirty Heads", "Louis Richards"]');
CREATE INDEX tracks_artistnames_gin_idx ON tracks USING gin (artistnames);</code>
Salin selepas log masuk

Contoh pertanyaan:

<code class="language-sql">SELECT * FROM tracks WHERE artistnames ? 'The Dirty Heads';
SELECT * FROM tracks WHERE artistnames @> '"The Dirty Heads"'::jsonb;</code>
Salin selepas log masuk

Mengendalikan json dalam PostgreSQL 9.3

Untuk versi PostgreSQL sebelum 9.4, fungsi invarian dan indeks GIN boleh digunakan.

Buat fungsi:

<code class="language-sql">CREATE OR REPLACE FUNCTION json2arr(_j json, _key text)
RETURNS text[] LANGUAGE sql IMMUTABLE AS
'SELECT ARRAY(SELECT elem->>_key FROM json_array_elements(_j) elem)';</code>
Salin selepas log masuk

Kemudian buat indeks fungsi:

<code class="language-sql">CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (json2arr(artists, 'name'));</code>
Salin selepas log masuk

Gunakan pertanyaan yang sepadan dengan ungkapan indeks:

<code class="language-sql">SELECT * FROM tracks WHERE '{"The Dirty Heads"}'::text[]</code>
Salin selepas log masuk

Sentiasa pastikan bahawa fungsi yang digunakan dalam indeks tidak boleh diubah untuk membolehkan pengindeksan fungsi. Pengendali utama...

Artikel itu telah menulis semula teks asal, menggunakan bahasa yang lebih ringkas dan melaraskan beberapa ayat, tetapi mengekalkan kandungan teras teks asal dan lokasi gambar.

Atas ialah kandungan terperinci Bagaimana untuk Mengindeks Tatasusunan JSON dengan Cekap dalam PostgreSQL untuk Mendapatkan Elemen Lebih Pantas?. 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