Loading...
MySQL 9.5 Reference Manual 9.5의 10.3.3 SPATIAL Index Optimization의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
MySQL은 NOT NULL geometry 값을 가지는 column에 대해 SPATIAL index 생성을 허용합니다( Section 13.4.10, “Creating Spatial Indexes” 참조). Optimizer는 index가 설정된 column의 SRID attribute를 확인하여 비교에 사용할 공간 기준 참조 시스템(SRS)을 결정하고, 해당 SRS에 적합한 계산을 사용합니다. (MySQL 9.5 이전에는 optimizer가 SPATIAL index 값을 직교 좌표계 계산을 사용하여 비교하며, column에 비‑직교 좌표계 SRID 값이 포함된 경우 이러한 연산의 결과는 정의되지 않습니다.)
비교가 올바르게 동작하려면, SPATIAL index에 포함된 각 column은 SRID‑restricted이어야 합니다. 즉, column 정의에 명시적인 SRID attribute가 포함되어야 하고, 모든 column 값이 동일한 SRID를 가져야 합니다.
Optimizer는 SRID‑restricted column에 대해서만 SPATIAL index를 고려합니다:
직교 좌표계 SRID로 제한된 column에 대한 index는 직교 좌표계 경계 상자 계산을 가능하게 합니다.
지리 좌표계 SRID로 제한된 column에 대한 index는 지리 좌표계 경계 상자 계산을 가능하게 합니다.
Optimizer는 SRID attribute가 없는(따라서 SRID‑restricted가 아닌) column에 대한 SPATIAL index는 무시합니다. MySQL은 이러한 index를 다음과 같이 계속 유지 관리합니다:
Table 변경
( INSERT,
UPDATE,
DELETE 등)에 대해 index가 갱신됩니다. Column에 직교 좌표계 값과 지리 좌표계 값을 혼합해서 포함할 수 있더라도, 갱신은 index가 직교 좌표계인 것처럼 수행됩니다.
이러한 index는 오직 하위 호환성 유지를 위한 용도로만 존재합니다(예를 들어, MySQL 8.4에서 dump를 수행하고 MySQL 9.4에서 restore하는 능력 등). SRID‑restricted가 아닌 column의 SPATIAL index는 optimizer에 아무런 도움이 되지 않으므로, 각 column은 다음과 같이 수정해야 합니다:
Column 내의 모든 값이 동일한 SRID를 가지는지 확인합니다. Geometry column col_name 에 포함된 SRID를 확인하려면 다음 query를 사용합니다:
1SELECT DISTINCT ST_SRID(col_name) FROM tbl_name;
Query가 한 행보다 많은 결과를 반환하면, column에는 여러 SRID가 혼합되어 있는 것입니다. 이 경우, 모든 값이 동일한 SRID를 갖도록 내용을 수정해야 합니다.
Column을 재정의하여 명시적인 SRID attribute를 갖도록 합니다.
SPATIAL index를 다시 생성합니다.
10.3.2 Primary Key Optimization
10.3.4 Foreign Key Optimization