Postgres jsonb를 사용하여 배열의 구조 쿼리
Jsonb 배열은 Postgres에 구조화된 데이터를 저장할 수 있으므로 중첩된 개체로 쿼리를 용이하게 합니다. 그러나 순차 인덱스를 사용하여 배열 값에 액세스하면 순차 스캔이 발생할 수 있습니다.
쿼리 성능 향상을 위한 적절한 인덱싱
jsonb 배열 비교와 관련된 쿼리, 특히 다음과 같은 쿼리를 최적화하려면 제공되는 경우(특정 시간 범위 내의 이벤트 확인) 다음 단계를 수행할 수 있습니다. take:
기본 접근 방식(Postgres 12 및 나중에)
SELECT l.* FROM locations l WHERE l.events @? '$[*] ? (@.event_slug == "test_1") ? (@.end_time.datetime() < "2014-10-13".datetime()'
구체화된 뷰를 활용하는 고급 접근 방식
복잡한 쿼리로 인해 여전히 성능이 저하되는 경우 정규화된 관련 속성을 사용하여 구체화된 뷰를 만드는 것을 고려해 보세요.
이벤트 데이터 생성 유형:
CREATE TYPE event_type AS ( , event_slug text , start_time timestamp , end_time timestamp );
구체화된 뷰 생성:
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;
구체화된 인덱스 보기:
CREATE INDEX loc_event_idx ON loc_event (event_slug, end_time, location_id);
쿼리 구체화된 보기:
SELECT * FROM loc_event WHERE event_slug = 'test_1' AND end_time >= '2014-10-30 14:04:06 -0400'::timestamptz;
적절한 연산자 활용 클래스를 사용하고 구체화된 뷰와 같은 고급 접근 방식을 고려하면 jsonb 배열 비교와 관련된 쿼리에 대해 최적의 성능을 얻을 수 있습니다. 데이터.
위 내용은 성능 향상을 위해 jsonb 배열에서 Postgres 쿼리를 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!