조회 테이블 (##lookup
)이 있습니다. 나는 데이터를 복제하기 때문에 나쁜 디자인이라는 것을 알고 있지만, 그것은 내 쿼리를 엄청나게 빠르게한다. 이 명확하게 제대로 테이블을 업데이트쿼리에서 제외 위치
delete from ##lookup
insert into ##lookup select distinct col1,col2,... from table1...join...etc...
:이 표는이 동작을 시뮬레이션하고 싶은
insert into ##lookup select distinct col1,col2,... from table1...join...etc...
에게 웁니다 쿼리가 있습니다. 그러나 이것은 많은 삽입 및 삭제입니다. 그것은 내 색인을 망쳐 놓고 선택할 테이블을 잠급니다. 더 오래 걸릴 수 있습니다
delete from ##lookup where not in (select distinct col1,col2,... from table1...join...etc...)
insert into ##lookup (select distinct col1,col2,... from table1...join...etc...) except if it is already in the table
두 번째 방법은, 그러나 나는 "아니오 잠금"말할 수와 나는 테이블에서 선택할 수 있습니다 :
이 테이블
도 같은 업데이트 할 수 있습니다.두 번째 방법으로 쿼리를 작성하는 방법에 대한 아이디어가 있습니까?
ya 잘 이상적인 솔루션은 SQL 서버에서 호출 할 때 "meterialized veiw"또는 인덱싱 된 뷰를 사용하는 것입니다. 그러나 뷰를 인덱싱하려면이 경우 자체 조인을 사용하지 않아야합니다.자가 조인은 심지어 기술적으로 자체 조인이 아닌 경우 조인에서 동일한 테이블을 두 번 사용하는 것을 포함합니다. 따라서 최적이 될 수있는 옵션을 사용할 수 없습니다. 나를 믿어 라. 나와 나보다 훨씬 더 똑똑한 몇 사람은 더 나은 해결책을 찾기 위해 많은 시간을 투자했다. 소스 테이블을 죽음으로 인덱싱하는 것은 지금까지 우리에게 달렸고 질의를 최적화 할 수는 없었습니다 ... – kralco626
하지만 전적으로 당신과 동의합니다. 이것은 엿 같은 해결책입니다 ...Microsoft 만이보기를 사용하도록 허용하는 경우 ... 내 문제의 해결 방법이 있지만 알아 내기가 너무 복잡합니다. 나는 그것에 관하여 질문을 여기에서 물었다 : http://stackoverflow.com/questions/3046058/need-some-serious-help-with-self-join-issue 그 문제점이 해결되면 나는 이것을 할 필요 없다. – kralco626