SQL Server/SQL Server Tip

Spatial Index (공간 인덱스) 생성, 수정, 삭제

SungWookKang 2015. 7. 23. 08:50
반응형

Spatial Index (공간 인덱스) 생성, 수정, 삭제 

   

-       Version : SQL Server 2008, 2008R2, 2012 

   

Spitial Indedx(공간 인덱스)는 geometry 또는 geography 데이터 형식의 열(공간 열)에서 특정 작업을 좀 더 효율적으로 수행 할 수 있다. 하나의 공간 열에 두 개 이상의 공간 인덱스가 지정될 수 있다. 예를 들어 하나의 단일 열에 다른 공간 분할 매개 변수를 인덱싱할 경우 유용하다. 

   

[Spatial Index(공간 인덱스) 제한 사항] 

공간인덱스 만들기 위해서는 몇 가지 제한 사항이 있다. 다음 목록을 통해 알아 보자. 

l  공간 인덱스는 geometry 또는 geography 유형의 열에서만 만들 수 있다. 

l  공간 인덱스는 기본 키가 있는 테이블에서만 정의 할 수 있다. 

l  테이블의 최대 기본 키 열 수는 15개이다. 

l  인덱스 키 레코드의 최대 크기는 895바이트 이다. 

l  공간 인덱스는 인덱싱된 뷰에 저장할 수 없다. 

l  지원되는 테이블의 공간 열에 공간 인덱스를 249개까지 만들 수 있다. 

l  공간 인덱스는 한 번에 하나씩 만들 수 있다. 

l  인덱스 생성 작업은 병렬처리를 사용할 수 있다. 

l  SQL Server 2012의 공간 분할은 하위 버전으로 복제 할 수 없다. 

   

테스트를 위해 공간 열이 포함된 테이블을 생성하고 데이터를 입력한다. 데이터는 geometry 형식을 사용한다. 

IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL  

DROP TABLE dbo.SpatialTable; 

GO 

   

CREATE TABLE SpatialTable  

( id int IDENTITY (1,1) primary key, 

GeomCol1 geometry,  

GeomCol2 AS GeomCol1.STAsText() ); 

GO 

   

INSERT INTO SpatialTable (GeomCol1) 

VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0)); 

   

INSERT INTO SpatialTable (GeomCol1) 

VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0)); 

GO 

   

select * from SpatialTable 

   

geometry 데이터는 다음과 같다. 

 

   

공간 데이터는 다음과 같은 출력물을 확인 할 수 있다.  

 

   

   

[SSMS에서 공간 인덱스 생성하기] 

인덱스를 생성할 테이블을 확장하여 [인덱스]를 선택. 마우스 오른쪽을 클릭하여 [새인덱스] – [공간 인덱스]를 선택 한다. 

 

   

   

   

새 인덱스 생성 창이 나타나면 [추가 버튼을 이용하여 인덱스 열을 추가한다. 

 

   

공간 인덱스에 추가할 수 있는 인덱스 열은 데이터 형식이 geometry, geography 형식이다. 

 

   

인덱스를 추가하고 나면 다음과 같이 X의 최대값은 X 최소값보다 커야 한다. Y 최소값은 Y 최대값 보다 커야한다는 경고가 나타난다. 왼쪽 공간 탭에서 다음과 같이 최소, 최대 값을 수정한다. 

 

   

최소, 최대값을 수정하고 다른 탭으로 이동하면 정상적인 준비 상태가 된다. [확인]을 클릭하면 인덱스가 생성된다. 

 

   

인덱스 생성이 완료 되고 나면 다음과 같이 공간 인덱스가 생성된 것을 확인 할 수 있다. 

 

   

   

[T-SQL 공간인덱스 생성하기] 

CREATE SPATIAL INDEX SIndx_SpatialTable_geometry_col1  

ON SpatialTable(geometry_col) 

WITH ( BOUNDING_BOX = ( 0, 0, 500, 200 ) ); 

  

   

   

[참고자료] 

공간 인덱스 만들기, 수정 및 삭제 : http://technet.microsoft.com/ko-kr/library/bb964705.aspx 

CREATE SPATIAL INDEX : http://technet.microsoft.com/ko-kr/library/bb934196.aspx 

   

   

   

2013-11-21 / 강성욱 / http://sqlmvp.kr 

반응형