나는 다음과 같은 쿼리를 실행 (또는 예상 실행 계획을 얻으려고), 그것은 매우 느린 할 때 10 + 분 (내가 기다리고 중지) :정말 느린
SELECT TOP 1 1
FROM File WITH (NOLOCK)
WHERE FileID = '5021ECD3-2012-62E0-1F12-000041CCB35A'
AND FileSize > 0
AND Content IS NULL
그러나, 다음 순간입니다 :
이DECLARE @test varbinary(1)
SELECT TOP 1 @test = Content
FROM File WITH (NOLOCK)
WHERE FileID = '5021ECD3-2012-62E0-1F12-000041CCB35A'
AND FileSize > 0
IF @test IS NULL
PRINT 'a'
FileID에 고유 인덱스가 있습니다. 내용은 varbinary (최대)입니다. 왜 옵티마이 저가 먼저 그것을 사용하지 않는가? 그건 꽤 논리적 일거야, 안 그래? 그것은 내용이 null인지 아닌지 테이블 파일의 모든 행을 확인하고 적용하는 것 같습니다 WHERE FileID에 = '...'
이유 때문에 TOP 1이 있습니까? EXISTS를 사용하고 있다고 할 수 있습니까? 및 콘텐츠 실제로 NULLable 있습니까? 그리고 쿼리 계획을 추가 할 수 있습니다. 또한, FileID와 FileSize의 색인이 생성됩니까? – gbn
어떤 버전의 SQL입니까? 이후 버전의 경우 null이있는 열을 인덱스로 사용하기 위해 null 문을 사용하여 비 클러스터형 인덱스를 추가 할 수 있습니다. – Paul
@gbn 내용이 Null입니다. 네,'IF EXISTS'에서이 쿼리를 사용하고 있었는데 믿을 수 없을만큼 천천히 진행되었습니다. 나는 쿼리 계획을 얻으려고 노력할 것이다. 쿼리가 끝날 때까지 나는 실제로 기다리지 않았다. @Paul 이것은 SQL Server 2008에있다. 네, 인덱스를 추가하는 것이 나의 최후의 수단이 될 것이다 :/그것은 단지 영원히 걸리고 테이블을 잠근다. 내가 정말 무엇을하고 있는지 SQL 서버 이해하지 @gbn ( – Kevin