하위 쿼리 사용시 공간 인덱스 사용 불가
- Version : SQL Server 2012
SQL Server 2012 부터는 공간 인덱스를 지원한다. 공간 인덱스는 공간 열을 인덱싱 할 수 있는 확장된 인덱스의 유형이다. 공간 열은 Geometry 또는 Geography와 같은 공간 데이터를 포함하는 테이블 열이다.
l 공간 인덱스 : http://sqlmvp.kr/140201241880
이번 포스트는 CSS SQL Server Engineers 블로그에 게시된 내용으로 필자가 읽고 이해한 내용을정리 하였으며 번역의 오류나 기술적 오류가 있음을 미리 알려둔다. 이번 포스트의 팁을 활용하여 SQL Server 쿼리 처리의 공간 인덱스를 사용하여보자. 이 팁은 공간 인덱스 뿐만 아니라 일반적인 쿼리에도 적용 된다.
l 공간 메서드는 조건문의 왼쪽에 위치한다(where clause)
col.STIntersects(@val) = 1 -- Can use the index if costing is appropriate |
l 공간 메서드에 전달된 값은 상수이어야 한다.
col.STDistance(@val) = 1 * 10000 -- Can use the index if costing is appropriate |
복잡한 쿼리
col.STDistance(@val) = 1 * 10000 -- Can use the index if costing is appropriate col.STDistance(@val / 10000) = 1 -- Unlikely to use index, use previous form
복잡한 쿼리 /* The subquery form does not consider the index */ Select * from Spat where col2.STIntersects((select col2 from Spat where Id = 23 and col2 is not null))=1 /* Using index hint - getting an error message for this query form */ -- Msg 8622, Level 16, State 1, Line 1 -- Query processor could not produce a query plan because of the hints defined in this query. Select * from Spat with (index(SpatIDX)) where col2.STIntersects( (select col2 from Spat where Id =23) ) = 1 /* Variable or Join forms attempt to use the index */ Declare @i geography Set @i = (select col2 from Spat where Id =23) Select * from Spat where col2.STIntersects((@i))=1 order by Id Select s1.* from Spat as s1 join Spat as s2 ON s1.col2.STIntersects(s2.col2) = 1 and s2.Id = 23 order by s1.Id |
우리는 변수를 참조하거나 조인구문을 사용하여 SQL Server가 하위 쿼리 처리시 고려되지 않은 공간 인덱스의 사용에 대한 평가를 할 수 있다. 쿼리가 인덱스를 사용하도록 고려되어 있는지 확인해야 한다.
[참고자료]
http://blogs.msdn.com/b/psssql/archive/2013/12/09/spatial-index-is-not-used-when-subquery-used.aspx
2013-12-10 / 강성욱 / http://sqlmvp.kr
'SQL Server > SQL Server Tip' 카테고리의 다른 글
SQL Server 2012 새로운 날짜 및 시간 함수 (0) | 2015.07.23 |
---|---|
SQL Server 2012 FORMAT 함수와 CONCAT 함수 (0) | 2015.07.23 |
Spatial Data Type (공간 데이터 형식) (0) | 2015.07.23 |
Spatial Index (공간 인덱스) 생성, 수정, 삭제 (0) | 2015.07.23 |
Spatial Indexing 개요 (공간 인덱스) (0) | 2015.07.23 |