> 데이터 베이스 > MySQL 튜토리얼 > 성능 향상을 위해 jsonb 배열에서 Postgres 쿼리를 어떻게 최적화할 수 있습니까?

성능 향상을 위해 jsonb 배열에서 Postgres 쿼리를 어떻게 최적화할 수 있습니까?

Patricia Arquette
풀어 주다: 2025-01-06 14:06:41
원래의
372명이 탐색했습니다.

How Can I Optimize Postgres Queries on jsonb Arrays for Improved Performance?

Postgres jsonb를 사용하여 배열의 구조 쿼리

Jsonb 배열은 Postgres에 구조화된 데이터를 저장할 수 있으므로 중첩된 개체로 쿼리를 용이하게 합니다. 그러나 순차 인덱스를 사용하여 배열 값에 액세스하면 순차 스캔이 발생할 수 있습니다.

쿼리 성능 향상을 위한 적절한 인덱싱

jsonb 배열 비교와 관련된 쿼리, 특히 다음과 같은 쿼리를 최적화하려면 제공되는 경우(특정 시간 범위 내의 이벤트 확인) 다음 단계를 수행할 수 있습니다. take:

  • jsonb_path_ops 연산자 클래스 사용: 이렇게 하면 보다 크거나 작은 연산자가 포함된 복잡한 jsonb 비교에 대한 효율적인 일치가 보장됩니다.

기본 접근 방식(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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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