MS Sql 서버가 단락 이론을 지원하여 불필요한 검사를 피함으로써 성능을 향상시키는 것은 분명하지만,
지원 예 :
SELECT 'TEST'
WHERE 1 = 'A'
SELECT 'TEST'
WHERE 1 = 1 OR 1 = 'A'
여기서 첫 번째 예는 'varchar 값'A '를 데이터 유형 int로 변환 할 때 변환에 실패했습니다.'라는 오류가 발생합니다.
조건 1 = 1이 TRUE로 평가되어 두 번째 조건이 전혀 실행되지 않으므로 두 번째는 쉽게 실행됩니다.
더
SELECT 'TEST'
WHERE 1 = 0 OR 1 = 'A'
여기서 첫 번째 조건은 false로 평가되므로 DBMS는 두 번째 조건으로 가고 다시 위의 예와 같이 변환 오류가 발생합니다.
참고 : 오류가 발생한 쿼리 결과가 조건을 실행하고 단축 된 다른 방법을 의미하는 경우 조건이 실행되거나 단축 된 오류를 재조정하기 위해 잘못된 조건을 작성했습니다.
간단한 설명
치다,
WHERE 1 = 1 OR 2 = 2
첫 번째 조건이 TRUE 로 평가됨에 따라 어떤 값 으로든 평가가 결과에 전혀 영향을 미치지 않기 때문에 두 번째 조건을 평가하는 것은 의미가 없으므로 Sql 서버가 불필요한 조건 확인 또는 평가를 생략하여 쿼리 실행 시간을 절약 할 수있는 좋은 기회 .
경우 "OR" 첫째 조건으로 평가되면 TRUE 로 연결된 전체 체인 "OR" 다른 평가 않고 참으로 평가로 간주한다.
condition1 OR condition2 OR ..... OR conditionN
condition1이 true로 평가되면 conditionN을 건너 뛸 때까지 모든 조건을 유지하십시오. 첫 번째 TRUE 결정시 일반화 된 단어에서 OR로 연결된 다른 모든 조건은 건너 뜁니다.
두 번째 조건을 고려하십시오
WHERE 1 = 0 AND 1 = 1
첫 번째 조건이 FALSE 로 평가됨에 따라 두 번째 조건을 평가하는 것은 의미가 없으므로 어떤 값으로도 결과에 영향을 미치지 않으므로 Sql 서버가 불필요한 조건 확인 또는 평가를 건너 뛰어 쿼리 실행 시간을 절약 할 수있는 좋은 기회 .
있는 경우는 "AND" 제 조건에 따라 평가되는 경우 FALSE 접속 전체 체인 "AND" 다른 평가없이 FALSE로 평가를 고려 것이다.
condition1 AND condition2 AND ..... conditionN
조건 1가에 평가되는 경우 FALSE ,까지 모든 조건 휴식 conditionN을 생략 할 것이다. 첫 번째 거짓 을 결정할 때 일반화 된 단어에서 AND로 연결된 다른 모든 조건 은 건너 뜁니다.
현명한 프로그래머 인 THEREFOR는 항상 비용이 많이 들거나 가장 적은 양의 조명 조건을 평가하거나 짧은 회로의 최대 이익을 얻을 수있는 방법으로 조건을 설정하는 방식으로 항상 조건의 체인을 프로그램해야합니다.