나는 A의 레코드가 B의 여러 레코드에 매핑되는 두 개의 테이블 A와 B를 가졌습니다. 테이블 A의 레코드와 매핑 된 모든 레코드를 보여주는 쿼리가 있습니다. 같은 한 줄의 테이블 B :오라클 1 : n 효율적인 쿼리
TABLE A
--------
ID Name Tag ......
1 X 213
2 Y 222
TABLE B
--------
ID ACCESS_AREA
1 101
1 104
1 105
2 101
2 103
쿼리는 같은 수 있습니다 :
위의 작품이지만, 쿼리의 성능이 모두 레코드의 수가 매우 낮은SELECT ID,
Name,
Tag ,.....,
(SELECT WM_CONCAT(ACCESS_AREA)
FROM B
WHERE ID = A.ID) Access_areas
FROM A
테이블은 매우 큽니다. access_areas
에서 필터링이나 정렬을 수행하면 성능이 더 떨어집니다.
단순한 조인이 될 수 있도록 mv가 값을 계산하기 위해 구체화 된 뷰를 사용한다고 생각했지만 mv는 집계 함수를 사용하여 이러한 쿼리에 대한 커밋을 빠르게 새로 고칠 수 없습니다.
또 다른 옵션은 B에서 계산 된 값이 들어있는 테이블 A에 열을 추가하고 변경이 완료된 경우 테이블 B에서 트리거를 사용하여 새 열을 업데이트하는 것입니다. 그러나 트리거가있는 동일한 테이블을 쿼리 할 수 없기 때문에 이것은 또한 실현 가능하지 않습니다.
마지막 수단으로 두 번째 옵션을 구현하고 응용 프로그램 코드를 통해 열을 업데이트하기로 결정했습니다. 이는 매우 지루합니다.
아이디어가 있으십니까?
미안하지만 내가 언급 한 시나리오는 내가 직면 한 시나리오와 닮았습니다. 실제로 두 개의 더 유사한 계산 된 열이 있습니다. 또한, 불행히도 디자인 사양에 대한 의견이 없습니다. – Rnet
첫 번째 테이블과 관련 테이블의 모든 레코드를 단일 페이지에 나열하는 프런트 엔드 인터페이스가 있으므로 쿼리는 – Rnet
입니다. '페이지'는 HTML을 의미합니까? 그런 다음 걱정하지 마십시오. 쿼리 성능 문제는 HTTP를 통해 전달하고 HTML을 사용하여 렌더링함으로써 생성되는 성능 문제와 비교할 때 ** 아무것도 없습니다 **. 귀하의 이력서를 연마하는 시간 – symcbean