라는 Address
영구 계산 열이있는 이라는 테이블 이 있습니다 Hashkey
. 열은 결정적이지만 정확하지는 않습니다. 검색 할 수없는 고유 인덱스가 있습니다. 이 쿼리를 실행하면 기본 키를 반환합니다.
SELECT @ADDRESSID= ISNULL(AddressId,0)
FROM dbo.[Address]
WHERE HashKey = @HashKey
나는이 계획을 얻는다 :
색인을 강요하면이 더 나쁜 계획을 얻습니다.
인덱스와 탐색을 모두 시도하고 강제하면 오류가 발생합니다.
이 쿼리에 정의 된 힌트로 인해 쿼리 프로세서가 쿼리 계획을 생성 할 수 없습니다. 힌트를 지정하지 않고 사용하지 않고 쿼리를 다시 제출하십시오.
SET FORCEPLAN
이것이 정확하지 않기 때문입니까? 그것이 지속된다면 그것이 중요하지 않다고 생각 했습니까?
계산되지 않은 열로 만들지 않고이 인덱스를 검색 할 수있는 방법이 있습니까?
누구든지 이것에 관한 정보에 대한 링크가 있습니까?
실제 테이블 생성을 게시 할 수 없지만 다음은 동일한 문제가있는 테스트 테이블입니다.
drop TABLE [dbo].[Test]
CREATE TABLE [dbo].[Test]
(
[test] [VARCHAR](100) NULL,
[TestGeocode] [geography] NULL,
[Hashkey] AS CAST(
( hashbytes
('SHA',
( RIGHT(REPLICATE(' ', (100)) + isnull([test], ''), ( 100 )) )
+ RIGHT(REPLICATE(' ', (100)) + isnull([TestGeocode].[ToString](), ''), ( 100 ))
)
) AS BINARY(20)
) PERSISTED
CONSTRAINT [UK_Test_HashKey] UNIQUE NONCLUSTERED([Hashkey])
)
GO
DECLARE @Hashkey BINARY(20)
SELECT [Hashkey]
FROM [dbo].[Test] WITH (FORCESEEK) /*Query processor could not produce a query plan*/
WHERE [Hashkey] = @Hashkey