이 두 문장을 살펴 보자.
IF (CONDITION 1) OR (CONDITION 2)
...
IF (CONDITION 3) AND (CONDITION 4)
...
경우 CONDITION 1
IS TRUE
, 것입니다 CONDITION 2
확인?
경우 CONDITION 3
IS FALSE
, 것입니다 CONDITION 4
확인?
무엇에 조건에 대한 WHERE
: A의 수행하는 SQL Server 엔진의 최적화 모든 조건 WHERE
절? 프로그래머 가 SQL Server 최적화 프로그램이 올바른 방식으로 조건을 해결하도록 조건을 올바른 순서로 배치해야합니까 ?
추가 :
t-sql 코드에서 놀라운 링크를 제공 한 Jack에게 감사드립니다.
IF 1/0 = 1 OR 1 = 1
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
IF 1/0 = 1 AND 1 = 0
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
이 경우에는 0 으로 나누기 예외가 발생 하지 않습니다 .
결론:
C ++ / C # / VB에 단락이 발생하면 왜 SQL Server를 사용할 수 없습니까?
이 질문에 진정으로 답하기 위해 두 조건이 어떻게 작동하는지 살펴 보겠습니다. C ++ / C # / VB는 모두 코드 실행 속도를 높이기 위해 언어 사양에 정의 된 단락이 있습니다. 첫 번째 조건이 이미 참인 경우 N OR 조건을 평가하거나 첫 번째 조건이 이미 거짓 인 경우 M AND 조건을 평가해야하는 이유는 무엇입니까?
개발자는 SQL Server가 다르게 작동한다는 것을 알고 있어야합니다. 비용 기반 시스템입니다. 쿼리에 대한 최적의 실행 계획을 얻으려면 쿼리 프로세서가 모든 위치 조건을 평가하고 비용을 할당해야합니다. 그런 다음 이러한 비용을 전체적으로 평가하여 SQL Server가 제대로 계획하기 위해 정의 된 임계 값보다 낮아야하는 임계 값을 형성합니다. 비용이 정의 된 임계 값보다 낮 으면 계획이 사용되지만 그렇지 않은 경우 전체 조건이 다른 조건 비용 조합으로 다시 반복됩니다. 여기서 비용은 스캔 또는 탐색 또는 병합 조인 또는 해시 조인 등입니다.이 때문에 C ++ / C # / VB에서 사용 가능한 단락은 불가능합니다. 열에 인덱스를 강제로 사용하면 단락으로 간주되지만 그렇지는 않다고 생각할 수 있습니다. 그것은 단지 그 인덱스의 사용을 강요하고 그것으로 가능한 실행 계획의 목록을 단축시킵니다. 시스템은 여전히 비용 기반입니다.
개발자는 SQL Server가 다른 프로그래밍 언어에서와 같이 단락을 일으키지 않으며 강제로 할 수있는 일이 없다는 것을 알고 있어야합니다.