데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

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 



강성욱 / jevida@naver.com

Microsoft SQL Server MVP

Blog : http://sqlmvp.kr

Facebook : http://facebook.com/sqlmvp

   



No. Subject Author Date Views
1690 SQL Server 성능 대시보드 jevida(강성욱) 2016.09.13 2211
1689 SSMS를 이용한 데이터베이스 복사 하기 jevida(강성욱) 2016.09.13 11396
1688 SQL Server에서 DB2 링크드 서버 연결 방법 jevida(강성욱) 2016.09.13 3273
1687 SQL Server 인덱스 활성 / 비활성 하기 jevida(강성욱) 2016.09.13 2341
1686 파티션 오프셋과 SQL Server에 대한 디스크 할당 단위 크기 jevida(강성욱) 2016.09.13 1679
1685 Read the End of a Large Error Log (에러로그 끝 부분 읽기) jevida(강성욱) 2016.09.13 1299
1684 데이터베이스 여유공간 확인 jevida(강성욱) 2016.09.13 1445
1683 FILE GROUP 간 데이터 이동 jevida(강성욱) 2016.09.13 1601
1682 문서화 되지 않은 sys.fn_PhysLocFormatter 함수 jevida(강성욱) 2016.09.13 946
1681 SQL Server 관리자 전용 연결(DAC) jevida(강성욱) 2016.09.13 3363
1680 파일 접근 권한으로 인한 DB복원 실패 작업 해결하기 jevida(강성욱) 2016.09.13 1920
1679 DBCC CHECKDB 실행과 히스토리 관리 jevida(강성욱) 2016.09.13 1840
1678 MDF를 이용한 데이터베이스 복원 jevida(강성욱) 2016.09.13 1174
1677 EventID 3041 Error jevida(강성욱) 2016.09.13 1410
1676 데이터베이스 미러 백업 jevida(강성욱) 2016.09.13 1313
1675 SNAPSHOT을 이용한 SQL Server 복원 jevida(강성욱) 2016.09.13 2291
1674 복사 전용 백업(COPY ONLY BACKUP) jevida(강성욱) 2016.09.13 3341
1673 SQL Server 기본 백업 폴더 변경하기 jevida(강성욱) 2016.09.13 4044
1672 sp_helpindex 의 향상된 버전 minsouk 2016.05.17 4561
» Spatial Index (공간 인덱스) 생성, 수정, 삭제 jevida(강성욱) 2016.01.11 9236





XE Login