Loading...
MySQL 9.5 Reference Manual 9.5의 13.4.10 Creating Spatial Indexes의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
InnoDB 및 MyISAM 테이블의 경우 MySQL은 일반 인덱스를 생성하는 구문과 유사하지만 SPATIAL 키워드를 사용하는 구문을 통해 공간 인덱스를 생성할 수 있습니다. 공간 인덱스에 포함되는 컬럼은 반드시 NOT NULL로 선언되어야 합니다. 다음 예제는 공간 인덱스를 생성하는 방법을 보여 줍니다.
CREATE TABLE을 사용:1CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326, SPATIAL INDEX(g));
ALTER TABLE를 사용:1CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326); 2ALTER TABLE geom ADD SPATIAL INDEX(g);
CREATE INDEX를 사용:1CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326); 2CREATE SPATIAL INDEX g ON geom (g);
SPATIAL INDEX는 R-tree 인덱스를 생성합니다. 공간 컬럼에 대해 비공간 인덱싱을 지원하는 스토리지 엔진의 경우 엔진은 B-tree 인덱스를 생성합니다. 공간 값에 대한 B-tree 인덱스는 정확한 값 조회에는 유용하지만 범위 스캔에는 적합하지 않습니다.
옵티마이저는 SRID 제한이 있는 컬럼에 대해 정의된 공간 인덱스를 사용할 수 있습니다. 자세한 내용은 Section 13.4.1, “Spatial Data Types” 및 Section 10.3.3, “SPATIAL Index Optimization”을 참조하십시오.
공간 컬럼에 대한 인덱싱에 대한 자세한 내용은 Section 15.1.18, “CREATE INDEX Statement”을 참조하십시오.
공간 인덱스를 드롭하려면 ALTER TABLE 또는 DROP INDEX를 사용하십시오.
ALTER TABLE를 사용:1ALTER TABLE geom DROP INDEX g;
DROP INDEX를 사용:1DROP INDEX g ON geom;
예: 테이블 geom에 32,000개가 넘는 지오메트리가 있고, 이 지오메트리는 GEOMETRY 타입의 컬럼 g에 저장되어 있다고 가정합니다. 또한 이 테이블에는 객체 ID 값을 저장하기 위한 AUTO_INCREMENT 컬럼 fid가 있습니다.
1mysql> DESCRIBE geom; 2+-------+----------+------+-----+---------+----------------+ 3| Field | Type | Null | Key | Default | Extra | 4+-------+----------+------+-----+---------+----------------+ 5| fid | int(11) | | PRI | NULL | auto_increment | 6| g | geometry | | | | | 7+-------+----------+------+-----+---------+----------------+ 82 rows in set (0.00 sec) 9 10mysql> SELECT COUNT(*) FROM geom; 11+----------+ 12| count(*) | 13+----------+ 14| 32376 | 15+----------+ 161 row in set (0.00 sec)
컬럼 g에 공간 인덱스를 추가하려면 다음 구문을 사용하십시오.
1mysql> ALTER TABLE geom ADD SPATIAL INDEX(g); 2Query OK, 32376 rows affected (4.05 sec) 3Records: 32376 Duplicates: 0 Warnings: 0
13.4.9 Optimizing Spatial Analysis
13.4.11 Using Spatial Indexes