공간 인덱스 (Spatial Index)

Tibero Spatial DB 에서는 공간 질의 성능 향상을 위해 공간 인덱스 (Spatial Index)를 제공합니다.

공간 인덱스 생성

공간 인덱스 생성 방법과 제약에 대해서 설명합니다.

사용법

CREATE INDEX index_name on [schema_name.]
             table_name ON col_name RTREE
항목
설명

index_name

생성할 공간인덱스의 이름

schema_name

인덱스를 생성할 대상 테이블의 소유자

table_name

인덱스를 생성할 대상 테이블을 설정

col_name

인덱스를 생성할 대상을 설정

컬럼은 GEOMETRY TYPE이어야 함

RTREE

RTREE 인덱스로 생성함을 의미하는 예약어를 설정

예제

SQL>CREATE TABLE GIS (ID INTEGER PRIMARY KEY, GEOM GEOMETRY);
Table 'GIS' created.
SQL>CREATE INDEX RT_IDX_GIS ON GIS(GEOM) RTREE;
Index 'RT_IDX_GIS' created.

INSERT INTO GIS VALUES (101, ST_GEOMFROMTEXT('POINT(1 1)'));
INSERT INTO GIS VALUES (102, ST_GEOMFROMTEXT('MULTIPOINT(1 1, 2 2)'));
INSERT INTO GIS VALUES (103, ST_GEOMFROMTEXT('LINESTRING(1 1, 2 2)'));
INSERT INTO GIS VALUES (104, ST_GEOMFROMTEXT('MULTILINESTRING((1 1, 2 2),
(3 3, 4 5))'));
INSERT INTO GIS VALUES (105, ST_GEOMFROMTEXT('POLYGON((1 1, 2 1, 2 2, 1 2,
1 1))'));
INSERT INTO GIS VALUES (106, ST_GEOMFROMTEXT('POLYGON((0 0, 0 12, 12 12, 12 0,0 0),
(6 10, 6 11, 9 11, 9 10,6 10), (6 3, 6 6, 9 6, 9 3,6 3))'));
INSERT INTO GIS VALUES (107, ST_GEOMFROMTEXT('MULTIPOLYGON(((1 1, 2 1, 2 2, 1 2, 1 1)),

((3 3, 3 5, 5 5, 5 3, 3 3)))'));
INSERT INTO GIS VALUES (108, ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(1 1),
LINESTRING(2 2, 3 3))'));
INSERT INTO GIS VALUES (109, ST_BOUNDARY(ST_GEOMFROMTEXT('POINT(10 10)')));
INSERT INTO GIS VALUES (110, ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(1 1),
LINESTRING(2 2, 3 3))'));
COMMIT;

공간 인덱스 제약 사항

공간 인덱스는 아래와 같은 경우에 제약을 가집니다.

  • 여러 컬럼에 대해 하나의 인덱스를 걸 수 없습니다.

  • 공간 인덱스는 파티션될 수 없습니다.

  • 공간 인덱스는 GEOMETRY TYPE이 아닌 컬럼에 대하여 생성할 수 없습니다.

  • SQL의 WHERE 절에 다음의 함수를 구현하였을 때만 공간 인덱스의 사용이 가능합니다. - ST_CONTAINS - ST_COVEREDBY - ST_COVERS - ST_CROSSES - ST_DWITHIN - ST_EQUALS - ST_INTERSECTS - ST_OVERLAPS - ST_TOUCHES - ST_WITHIN

회전타원체 좌표계의 공간 인덱스는 해당 테이블의 GEOMETRY 컬럼에 제약 조건을 추가하여 생성 가능합니다.

사용법

ALTER TABLE table_name ADD CONSTRAINTS
constraint_name CHECK(ST_SRID(col_name)=srid);

예제

SQL>DROP INDEX RT_IDX_GIS;
Index 'RT_IDX_GIS' dropped.
SQL>UPDATE GIS SET GEOM=ST_SETSRID(GEOM,4326);
10 rows updated.
SQL>ALTER TABLE GIS ADD CONSTRAINTS SRID4326 CHECK(ST_SRID(GEOM)=4326);
Table 'GIS' altered.
SQL>CREATE INDEX RT_IDX_4326 ON GIS(GEOM) RTREE;
Index 'RT_IDX_4326' created. COMMIT;

기존의 GEOMETRY 컬럼의 좌표계를 변경하여 공간 인덱스를 생성해야할 경우는기존의 제약조건이 있다면 이를 삭제하고 GEOMETRY들의 SRID를 변경한 후, 해당 SRID에 대한 제약조건을 추가하여 공간 인덱스를 생성합니다.

사용법

ALTER TABLE table_name DROP CONSTRAINTS constraint_name;

예제

SQL>DROP INDEX RT_IDX_4326;
Index 'RT_IDX_4326' dropped.
SQL>ALTER TABLE GIS DROP CONSTRAINTS SRID4326;
Table 'GIS' altered.
SQL>UPDATE GIS SET GEOM=ST_SETSRID(GEOM,0);
10 rows updated.
SQL>ALTER TABLE GIS ADD CONSTRAINTS SRID4326 CHECK(ST_SRID(GEOM)=0);
Table 'GIS' altered.
SQL>CREATE INDEX RT_IDX_GIS ON GIS(GEOM) RTREE;
Index 'RT_IDX_GIS' created.
COMMIT;


공간 인덱스 제거

공간 인덱스의 제거는 다른 인덱스와 동일합니다.

사용법

DROP INDEX index_name
항목
설명

index_name

삭제할 공간 인덱스의 이름

Last updated