모델 이해
제공한 테이블 구조는 계층적 관계를 나타냅니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!