> 백엔드 개발 > PHP 튜토리얼 > 계층적 데이터베이스에서 모든 하위 사이트를 효율적으로 검색하는 방법은 무엇입니까?

계층적 데이터베이스에서 모든 하위 사이트를 효율적으로 검색하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-28 14:43:11
원래의
988명이 탐색했습니다.

How to Efficiently Retrieve All Child Sites in a Hierarchical Database?

효과적인 상위/하위 관계 달성

모델 이해

제공한 테이블 구조는 계층적 관계를 나타냅니다. site_Id 및 parent_Id 필드를 통해. 테이블의 각 행은 사이트에 해당하며 parent_Id는 상위 사이트의 ID를 참조합니다. 목표는 특정 사이트 ID의 모든 하위 항목을 효율적으로 검색하는 것입니다.

현재 방법의 제한 사항

현재 접근 방식에는 루프에 여러 쿼리가 포함되어 있어 비효율적일 수 있습니다. . 이를 최적화하기 위해 대체 솔루션을 살펴보겠습니다.

PostgreSQL을 사용한 재귀 쿼리

PostgreSQL과 같이 재귀 쿼리를 지원하는 데이터베이스를 사용할 수 있는 옵션이 있는 경우 재귀적 CTE(공통 테이블 표현식)를 사용하여 단일 쿼리에서 계층 구조를 탐색할 수 있습니다. 예:

WITH RECURSIVE ChildSites AS (
  SELECT
    site_Id,
    parent_Id
  FROM
    site
  WHERE
    parent_Id = <input_site_id>
  UNION ALL
  SELECT
    s.site_Id,
    s.parent_Id
  FROM
    site AS s
  JOIN
    ChildSites AS cs ON s.parent_Id = cs.site_Id
)
SELECT
  *
FROM
  ChildSites;
로그인 후 복사

최적화된 데이터 모델

데이터 모델을 수정할 수 있는 경우 다음과 같이 계층적 데이터용으로 특별히 설계된 데이터 모델을 사용하는 것이 좋습니다.

  • 폐점 테이블: 매장 전이 클로저, 상위 및 하위 항목에 대한 쿼리 최적화.
  • 중첩 세트: 계층 구조를 중첩 간격으로 표현하여 효율적인 범위 쿼리가 가능합니다.
  • 경로 열거: 각 노드에 고유한 경로를 할당하여 효율적인 하위 트리를 활성화합니다.

루트 ID 저장

또는 테이블에 root_Id 열을 추가하여 각 사이트의 최상위 상위 항목을 식별할 수 있습니다. 이를 통해 단일 쿼리를 사용하여 전체 트리를 효율적으로 검색할 수 있습니다.

SELECT
  *
FROM
  site
WHERE
  root_Id = <input_root_id>;
로그인 후 복사

위 내용은 계층적 데이터베이스에서 모든 하위 사이트를 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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