sqlserver not in 구문 충돌

1623 단어 sqlservernot in
두 장의 표 조직 구조 표(Organise)와 임금 지급 역사 기록 표(WagePerMonthHis)두 장의 표 는 Organise.Item 을 통 해id 와 WagePerMonthHis.OrgIdS 는 관련 Organise 표(이하 O 표 로 약칭)에 약 6000 개의 기록 11 개의 필드 가 있 고 WagePerMonthHis(이하 W 표 로 약칭)는 125 만 개의 기록 과 25 개의 필드 원래 프로그램 에서 다음 과 같은 문 구 는 W 표 에 없 는 모든 조직 구조 등급 이 2 인 기록 을 조회 하 는 것 이다
 
select OrgId as ,OrgName as
from Organise
where OrgLev=2
and item_id not in
(select OrgidS from WagesPerMonthHis
where WagesYear='2010' and WagesMonth=
'01' Group by OrgidS,OrgNameS)
order by Orgid
문 구 는 33 초 동안 실 행 됩 니 다.서버 설정 이 비교적 높 습 니 다.16 핵심 4CPU,24G 메모리,그리고 메모리 와 CPU 가 실 행 될 때 병목 이 나타 나 지 않 았 습 니 다.(select OrgidS from WagesPerMonthHis where WagesYear='2010'and WagesMonth='01'Group by OrgidS,OrgNames)이 문 구 는 실행 이 느 려 서 그런 줄 알 았 습 니 다.이 문 구 를 단독으로 실 행 했 는데 실행 속도 가 빠 르 고 약 2 초 만 에 나 왔 습 니 다.그래서 문제점 이 생 겼 습 니 다.not in 이라는 전체 스 캔 키워드 가 가 져 온 성능 이 떨 어 졌 습 니 다.가장 직접적인 것 은 페이지 가 응답 을 잃 고 관건 적 인 기능 을 사용 할 수 없습니다.not exist 문 구 를 시도 해 보 니 효과 가 똑 같 습 니 다.인터넷 에서 말 한 것 처럼 많은 성능 을 향상 시 킬 수 있 는 것 이 아니 라 는 것 을 알 게 되 었 습 니 다.그래서 문 구 를 다시 최적화 시 키 는 것 은 다음 과 같 습 니 다
 
select a.OrgId as ,a.OrgName as ,a.item_id
from Organise a
left outer join (select distinct b.OrgIdS from WagesPerMonthHis b
where WagesYear='2010' and WagesMonth='01') as b
on a.item_id = b.OrgidS
where a.OrgLev = 2
and b.OrgIdS is Null
order by
왼쪽 외 연결(사실은 왼쪽 연결 도 가능 합 니 다)으로전체 문장의 집행 속 도 는 400 ms 이 고 33 초 와 400 ms 라 고 생각 합 니 다.

좋은 웹페이지 즐겨찾기