2011-10-08 3 views
0

하나의 테이블 인 것처럼 여러 테이블의 일부 데이터를 쿼리하려고합니다. 모두 10 개의 테이블이 있습니다. 모두 서로 다른 열이 있지만 5 개의 일치하는 열이 있습니다. 이상적으로 나는 공유 된 컬럼이 하나의 테이블에 들어가도록 테이블을 다시 디자인 할 것이고 다른 테이블 간의 관계를 생성 할 수있을 것이다. 불행히도 이것은 기존 테이블을 변경할 수 없기 때문에 옵션이 아닙니다.여러 테이블에있는 인덱스 데이터

데이터에 액세스하고 색인을 생성하는 가장 좋은 방법은 무엇입니까? 예를 들어 UNION ALL을 사용하여 뷰 또는 저장 프로 시저를 만드는 것을 생각하고있었습니다.

SELECT COL1, COL2, COL3 FROM TABLE1 
UNION ALL 
SELECT COL1, COL2, COL3 FROM TABLE2 
UNION ALL 
SELECT COL1, COL2, COL3 FROM TABLE3 
UNION ALL 
SELECT COL1, COL2, COL3 FROM TABLE4 

하지만 어떻게 색인을 생성합니까? 보기 또는 저장 프로 시저가 가장 좋을까요? 아니면 완전히 다른 접근 방식일까요?

+0

기존 테이블에 인덱스를 추가 할 수 있습니까? –

답변

0

SQL Server에 indexed views이 있지만보기에서 UNION을 지원하지 않습니다.

당신이 한 것처럼 모든 테이블을 통해 데이터를 조회 할 수 있고, 현재 스키마를 변경할 수없는 경우, 그때 나는 등 인덱싱 할 수있는 또 다른 하나의 테이블

0
을 유지하기 위해 트리거를 사용하는 것이 좋습니다 것

노동 조합과 함께 모두보기 만하면됩니다. 보기에 참여하는 개별 테이블을 색인화해야합니다. 사실 그것은 성능에 도움이 될 수 있습니다 (옵티마이 저는 특정 테이블에서 일부 테이블을 스캔 할 필요가 없음을 알 수 있습니다).

저장 프로 시저는 from 절에서 사용하기가 쉽지 않기 때문에 복잡합니다. ('SELECT * FROM OPENQUERY (YourServer,'SET FMT_ONLY OFF EXEC stored_proc ')와 같은 OPENQUERY에서도 여전히 가능합니다. 결과를 생성 할 때 프로 시저 논리 (예 : 복잡한 보고서)가 필요할 때 더 나은 성능을 보입니다.

관련 문제