그래서 내 데이터베이스에는 BigInt 유형의 ID와 Geometry 유형의 Geometry가있는 테이블이 있습니다. 내가 쿼리를 시도 할 때공간 데이터베이스, 이상한 인덱스 동작
DECLARE @Geometry geometry
SET @Geometry = geometry::Parse('Polygon((300000 300000, 300000 325000, 325000 325000, 325000 300000, 300000 300000))')
SELECT Id FROM [Database].[dbo].[Table] WITH(index(idx_Geometry)) WHERE Geometry.STIntersects(@Geometry) = 1
DECLARE @Geometry geometry
SET @Geometry = geometry::Parse('Polygon((300000 300000, 300000 325000, 325000 325000, 325000 300000, 300000 300000))')
SELECT a.Id FROM [Database].[dbo].[Table] a with(Index(idx_Geometry)) WHERE a.Geometry.STIntersects(@Geometry) = 0
내가 오류 메시지가 : 기하학 필드는 인덱스를 사용하여 예상대로 다음 쿼리는 작품 idx_Geometry
라는 공간 인덱스가
쿼리 프로세서가 쿼리에 대한 쿼리 계획을 생성하지 못했습니다. a 공간 인덱스 힌트. 이유 : Spatial 인덱스는 술어에 제공된 comparand 을 지원하지 않습니다. 색인 힌트를 제거하거나 SET FORCEPLAN을 제거해보십시오.
이 두 쿼리는 기본적으로 동일합니다. 아무도 왜 이런 일이 일어 났는지 설명 할 수 있고 두 번째 쿼리와 함께 작동하도록 인덱스를 얻는 방법 (또는)을 설명 할 수 있습니까? 편집
감사
: 인덱스 = 0을 사용할 수없는 이유 절, 사람이 알고 어디에서 = 0이 아니라 = 1 그냥 두 번째를 발견했다?편집 2 (2 쿼리 = 1 일) : 편집 3
DECLARE @Geometry geometry
SET @Geometry = geometry::Parse('Polygon((300000 300000, 300000 325000, 325000 325000, 325000 300000, 300000 300000))')
--Works
SELECT Id FROM [RoadRoutingDatabase].[dbo].[Node] WITH(index(idx_Geometry)) WHERE Geometry.STIntersects(@Geometry) = 1
SELECT a.Id FROM [RoadRoutingDatabase].[dbo].[Node] a with(Index(idx_Geometry)) WHERE a.Geometry.STIntersects(@Geometry) = 1
--Gives Error Message
SELECT Id FROM [RoadRoutingDatabase].[dbo].[Node] WITH(index(idx_Geometry)) WHERE Geometry.STIntersects(@Geometry) = 0
SELECT a.Id FROM [RoadRoutingDatabase].[dbo].[Node] a with(Index(idx_Geometry)) WHERE a.Geometry.STIntersects(@Geometry) = 0
--Works but doesn't use Index
SELECT Id FROM [RoadRoutingDatabase].[dbo].[Node] WHERE Geometry.STIntersects(@Geometry) = 0
SELECT a.Id FROM [RoadRoutingDatabase].[dbo].[Node] a WHERE a.Geometry.STIntersects(@Geometry) = 0
하지 않습니다 어떤 작품과 어떤 그냥 갱신 : 나는 내 문제에 대한 주위에 작품을 발견 왼쪽 조인과 null 체크를 사용하지만 누군가가 나를 계몽 할 수 있다면 잘못된 교차점에 대한 인덱스를 사용할 수없는 이유에 대해 여전히 궁금합니다.
Intersect 쿼리는 기본적으로 쿼리 결과가 서로 다르다는 것을 이해하지 못합니다. 힌트를 사용할 수 있는지 여부는 왜 영향을 미치나요? – Manatherin