반응형
T-SQL에 존재하는 경우
만약에.SELECT
안에 있는 진술IF EXISTS
, 테이블에서 레코드를 찾자마자 실행이 중지됩니까?예를 들어,
IF EXISTS(SELECT * FROM table1 WHERE Name='John' )
return 1
else
return 0
= John이라는 이름의 행이 테이블에 존재할 경우 실행을 중지하고 1을 반환합니까, 아니면 더 많은 일치 항목을 찾기 위해 테이블 전체를 통과합니까?
예, 실행이 중지되므로 일반적으로 다음을 수행하는 것이 좋습니다.HAVING COUNT(*) > 0
그렇지 않을 때가 많습니다
와 함께EXISTS
실행 계획을 보면 실제 행의 수가table1
일치하는 레코드 수에 관계없이 1을 초과하지 않습니다.
경우에 따라 SQL Server는 다음을 위해 트리를 변환할 수 있습니다.COUNT
에 대한 것과 동일하게 질의합니다.EXISTS
단순화 단계에서(반접합이 있고 집계 연산자가 보이지 않는 상태에서) 이에 대한 예는 여기의 의견에서 논의됩니다.
질문에 나타난 것보다 더 복잡한 하위 트리의 경우 때때로 다음을 찾을 수 있습니다.COUNT
보다 성능이 뛰어납니다.EXISTS
하지만.세미 조인은 하위 트리에서 하나의 행만 검색하면 되기 때문에 트리의 해당 부분에 대해 중첩 루프가 있는 계획을 권장할 수 있습니다. 실제로는 최적으로 작동하지 않을 수도 있습니다.
이 경우에는 "다른"이 필요 없습니다.
IF EXISTS(SELECT * FROM table1 WHERE Name='John' ) return 1
return 0
언급URL : https://stackoverflow.com/questions/7327694/if-exists-in-t-sql
반응형
'programing' 카테고리의 다른 글
CoffeeScript에서 객체의 키와 값을 반복하는 방법? (0) | 2023.10.08 |
---|---|
오류 유효성 검사가 보존된 AJAX 양식(simple_form 사용) (0) | 2023.10.08 |
PowerShell에서 배열 평탄화 (0) | 2023.10.08 |
MySQL 쿼리에서 결과를 반환하는 Node.js (0) | 2023.10.08 |
시작 프로세스 - 관리자가 위치를 설정하지 않음으로써 작업 디렉토리 (0) | 2023.10.08 |