2014-11-24 1 views
-1

필터링 할 Integer ID 필드 (SQL Server)가 여러 개 있습니다. 새 행 삽입을 준비 중입니다. WHERE fieldname IS NOT NULL을 사용하는 것이 더 빠르지 않거나 WHERE fieldId > 0을 사용하여 기존 ID 값의 목록을 얻을 수 있습니까?WHERE 필드가> 0보다 빨리 더 빠릅니다.

+0

QUERY 실행 계획 체크 아웃 –

+0

왜 둘 중 하나를 사용 하시겠습니까? 그들은 어떻게 비교할 수 있습니까? –

+0

'NOT NULL'과'> 0'은 아주 다른 두 가지입니다. 0은 null이 아닙니다. 당신은 비슷하지 않은 두 가지를 비교하고 있습니다. –

답변

1

댓글이 너무 깁니다.

SQL Server는 (모든 데이터베이스와 마찬가지로) 데이터 페이지의 디자인이 다소 복잡합니다. Here은 더 자세한 내용을 나타냅니다.

그러나 생각은 NULL 플래그가 실제 값과 별도로 비트 맵에 저장된다는 것입니다. 데이터 페이지에서 값을 읽으려면 저장소 엔진이 그 밖의 작업과 상관없이 NULL 플래그를 구문 분석해야합니다. 값은 NULL 플래그 없이는 의미가 없습니다.

이 관점에서 보면 값을 비교할 때 NULL 플래그를 구문 분석하고 값을 검색해야합니다. 값이 필요하지 않으면 엔진이 NULL 플래그 만 가져올 수 있습니다 (이론적으로) 가능합니다.

질문 : "SQL Server는 IS NULL 비교를 최적화하여 비트 맵에서 NULL 플래그를 가져오고 나머지 값은 가져 오지 않습니까?" 나는이 질문에 대한 답을 모른다.

그러나 페이지상의 데이터 값의 경우 여분의 4 바이트를 복사하거나 복사하지 않는 것의 차이는 실제로 아주 작습니다. 페이지 외부 저장 용량과의 중요한 차이점이 있으므로 일 수 있습니다. 스토리지 아키텍처의 내 지식을 바탕으로

내 추측은입니다은 매우, 매우, 매우 작은 최적화를 할 수 NULL 값 비교. 실제로 차이가 있는지 나는 모른다. 어쨌든, 여분의주기 또는 2 회의 저축은 눈에 띄지 않을 것입니다.