>데이터 베이스 >MySQL 튜토리얼 >PostgreSQL의 JSON 데이터 내에서 배열 요소를 효율적으로 쿼리하는 방법은 무엇입니까?

PostgreSQL의 JSON 데이터 내에서 배열 요소를 효율적으로 쿼리하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-15 10:00:44884검색

How to Efficiently Query for Array Elements within JSON Data in PostgreSQL?

PostgreSQL의 JSON 데이터에서 배열 요소 검색

PostgreSQL의 JSON 데이터 유형(버전 9.3에서 도입)은 복잡한 데이터 구조의 저장 및 관리를 단순화합니다. 그러나 JSON 배열 내의 특정 요소를 효율적으로 쿼리하는 것은 까다로울 수 있습니다. 이 가이드는 특히 객체 배열 내의 'src' 필드에 초점을 맞춰 배열 요소를 검색하는 효과적인 전략을 보여줍니다.

PostgreSQL 9.4 이상에 최적화된 접근 방식(jsonb)

PostgreSQL 9.4 이상 버전은 우수한 jsonb 데이터 유형을 제공하여 향상된 성능과 기능을 제공합니다. 가장 효율적인 방법은 @>:jsonb_array_elements()와 함께

연산자를 활용하는 것입니다.
<code class="language-sql">SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';</code>

이 간결한 쿼리는 '객체' 배열에 지정된 기준과 일치하는 요소가 포함되어 있는지 직접 확인합니다.

PostgreSQL 9.3 이상용 솔루션(json)

PostgreSQL 9.3 이상(json 유형 사용)의 경우 json_array_elements() 함수가 측면 조인 내에서 사용됩니다.

<code class="language-sql">SELECT data::text, obj
FROM reports r, json_array_elements(r.data#>'{objects}') obj
WHERE obj->>'src' = 'foo.png';</code>

이 접근 방식은 배열의 중첩을 해제하여 개별 요소 검사를 허용합니다.

중요 사항:

  • 이러한 예에서는 JSON 배열 내에 단일 수준의 중첩이 있다고 가정합니다. 더 깊게 중첩된 배열에는 추가 unnest 호출 또는 측면 조인이 필요합니다.
  • 실질적인 데이터 세트의 경우 쿼리 성능을 최적화하려면 '개체' 표현식에 대한 인덱스를 생성하는 것이 중요합니다. 이렇게 하면 검색 프로세스가 크게 가속화됩니다.

위 내용은 PostgreSQL의 JSON 데이터 내에서 배열 요소를 효율적으로 쿼리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.