집 >데이터 베이스 >MySQL 튜토리얼 >수백만 행에 대해 Postgres에서 JSONB 배열을 효율적으로 쿼리하려면 어떻게 해야 합니까?
Postgres에서 JSON 배열 요소에 액세스하려면 앞서 설명한 접근 방식과 다른 구문이 필요합니다. JSON 배열의 첫 번째 요소에 액세스하려면 이전 시도 대신 인덱스가 0인 표현식을 사용하십시오.
이 시나리오에 권장되는 쿼리 구문은 다음과 같습니다.
e->0->>'event_slug'
또한 Postgres는 다음을 제공합니다. jsonb 데이터 유형에 대한 포괄적인 지원. Postgres 12 이상에서는 jsonb 열을 사용하여 "보다 큼" 또는 "보다 작음" 비교를 위해 SQL/JSON 경로 기능을 활용할 수 있습니다.
특정 쿼리의 경우 권장되는 접근 방식은 다음을 사용하여 GIN 인덱스를 생성하는 것입니다. jsonb_path_ops 연산자 클래스:
CREATE INDEX locations_events_gin_idx ON locations USING GIN (events jsonb_path_ops);
이 인덱스를 사용하면 다음 쿼리가 인덱스를 활용하고 효율적인 결과를 제공해야 합니다. 결과:
SELECT l.* FROM locations l WHERE l.events @? '$[*] ? (@.event_slug == "test_1") ? (@.end_time.datetime() < "2014-10-13".datetime())'
jsonb에 대한 직접적인 "보다 큼" 또는 "보다 작음" 연산자가 없는 이전 버전의 Postgres에서는 구체화된 뷰를 사용하여 비슷한 성능을 얻을 수 있습니다. 여기에는 관련 속성을 정규화된 형식으로 저장하여 효율적인 쿼리를 위한 기존 btree 인덱스를 생성할 수 있는 작업이 포함됩니다.
각각 약 10개의 이벤트가 포함된 수백만 개의 행이 있는 사용 사례를 고려할 때 GIN 인덱스 및 구체화된 뷰 접근 방식이 모두 실행 가능합니다. 솔루션. 최선의 선택은 쿼리의 복잡성, 업데이트 빈도, 원하는 성능 특성 등의 요인에 따라 달라집니다.
위 내용은 수백만 행에 대해 Postgres에서 JSONB 배열을 효율적으로 쿼리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!