> 데이터 베이스 > MySQL 튜토리얼 > 더 빠른 요소 검색을 위해 PostgreSQL에서 JSON 배열을 효율적으로 인덱싱하는 방법은 무엇입니까?

더 빠른 요소 검색을 위해 PostgreSQL에서 JSON 배열을 효율적으로 인덱싱하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-21 04:21:09
원래의
207명이 탐색했습니다.

더 빠른 요소 검색을 위해 PostgreSQL에서 JSON 배열을 효율적으로 인덱싱합니다

PostgreSQL 테이블의 JSON 배열 내 요소를 빠르게 식별하고 검색하는 것은 어려울 수 있습니다. 최적의 성능을 위해서는 특정 데이터 및 쿼리 요구 사항에 적합한 인덱싱 기술을 이해하는 것이 중요합니다.

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

PostgreSQL 9.4에서 JSONB 사용

PostgreSQL 9.4에는 인덱싱 가능성을 크게 향상시키는 바이너리 JSON 데이터 유형 jsonb가 도입되었습니다. jsonb를 사용하여 JSON 배열에서 직접 GIN 인덱스를 생성합니다.

<code class="language-sql">CREATE TABLE tracks (id serial, artists jsonb);
CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (artists);</code>
로그인 후 복사

이렇게 하면 GIN 인덱스를 사용할 수 있는 쿼리가 활성화됩니다. 예:

<code class="language-sql">SELECT * FROM tracks WHERE artists @> '["The Dirty Heads"]';</code>
로그인 후 복사

여기서 @>는 jsonb의 "contains" 연산자를 나타냅니다.

또는 jsonb_path_ops GIN 연산자 클래스를 사용할 수 있습니다(기본값이 아니며 일반적으로 더 작고 빠릅니다).

<code class="language-sql">CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (artists jsonb_path_ops);</code>
로그인 후 복사

고유한 이름 값에 맞게 최적화

artists 열에 고유한 이름의 값 배열만 포함되어 있는 경우 값을 객체보다는 JSON 텍스트 기본 요소로 저장하는 것이 더 효율적입니다. 이렇게 하면 중복 키가 필요하지 않습니다.

<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>
로그인 후 복사

쿼리 예시:

<code class="language-sql">SELECT * FROM tracks WHERE artistnames ? 'The Dirty Heads';
SELECT * FROM tracks WHERE artistnames @> '"The Dirty Heads"'::jsonb;</code>
로그인 후 복사

PostgreSQL 9.3에서 json 처리

9.4 이전 PostgreSQL 버전에서는 불변 함수와 GIN 인덱스를 사용할 수 있습니다.

기능 생성:

<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>
로그인 후 복사

그런 다음 함수 인덱스를 만듭니다.

<code class="language-sql">CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (json2arr(artists, 'name'));</code>
로그인 후 복사

색인 표현식과 일치하는 쿼리 사용:

<code class="language-sql">SELECT * FROM tracks WHERE '{"The Dirty Heads"}'::text[]</code>
로그인 후 복사

함수 인덱싱을 활성화하려면 인덱스에 사용된 함수가 변경 불가능한지 항상 확인하세요. 주요 운영자...

기사는 보다 간결한 언어를 사용하여 원문을 다시 작성하고 일부 문장을 조정했지만 원문의 핵심 내용과 사진의 위치는 유지했습니다.

위 내용은 더 빠른 요소 검색을 위해 PostgreSQL에서 JSON 배열을 효율적으로 인덱싱하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿