PostgreSQL / PostGIS 공간 인덱스-속도 향상 없음


15

PostgreSQL / PostGIS 데이터베이스에 공간 테이블이 있습니다. 그 안의 모든 행은 다각형을 나타냅니다. 다음과 같은 형태입니다.

+----+--------+
|gid |   way  |
+----+--------+
|241 | 01030..|

기하 열은 "way"이며 다각형의 기하 구조를 포함합니다. WKT에서는 POLYGON (( '....'))입니다. 이 테이블에서 ST_Contains 쿼리를 많이 수행하여 두 개의 다각형이 서로 포함되어 있는지 테스트합니다.

Select ST_Contains(a.way, b.way) From table AS a, table AS b Where a.gid = 15 And b.gid = 16

이 쿼리 속도를 높이고 테이블에 공간 인덱스를 추가하는 방법이 궁금합니다.

CREATE INDEX table_way_gist ON table USING gist(way);

그러나 실제로는 속도가 향상되지 않습니다. ST_Contains 쿼리를 수행하기 전에 테이블을 모든 다각형으로 채운 후에 인덱스를 만듭니다. 테이블을 채우기 전에 인덱스를 추가해야합니까? 인덱스 작업을 위해 테이블에 특별한 요구 사항이 있습니까? 기하 기둥 방식의 투영 (분할)은 900913으로 설정됩니다.

사용중인 psql (PostgreSQL) 9.1.4 / POSTGIS = "1.5.3"

답변:


16

귀하의 질문에 표현 된 쿼리에 가장 효율적인 색인 은 위치 표현식에 나타나는 유일한 열이므로 gid의 색인입니다 .

 CREATE INDEX table_gid ON table (gid);

공간 만 소비하고 삽입 / 업데이트 / 삭제 속도가 느리기 때문에 gist 인덱스를 안전하게 삭제할 수 있습니다.

긴 설명

내가 말한 것처럼 가장 효과적인 색인은 db 엔진이 행을 더 빨리 검색 할 수 있기 때문에 gid에 대한 색인입니다 (일반적으로 검색은 프로세스에서 가장 느린 부분 임). 그 후에는 아마도 결과를 더 잘 계산할 것입니다.

  ST_Contains(a.way, b.way)

색인을 보지 않고 우울증. 그 이유는 찾는의 추가 비용있는 쿼리 플래너 가능성이 추정하는 것입니다 요지의 두 컬럼에 인덱스 위로 찾고 a.wayb.way 직접 값이 가치가 보는 행의 총 수와 노력이 아니다 인덱스가 고유 한 경우 특히 매우 작습니다.

경험상 플래너는 아마도 작은 데이터 세트에 대한 인덱스 스캔보다 테이블 스캔을 선호 할 것입니다 (데이터 세트 크기는 테이블 통계를보고 추정됩니다).


그것은 문제를 더 분명하게 만듭니다. 나는 그것을 시도 할 것이다. ST_Contains () 쿼리를 WHERE 절에 넣으면 공간 인덱스가 실제로 도움이됩니까? WHERE 절 내에서 ST_Contains를 호출하려면 스크립트를 재구성해야한다고 생각합니다. 현재 모든 다각형을 반복하고 항상 두 개를 별도로 테스트합니다.
MichiMichbeck

?? 당신은 공간 인덱스가 일을 느리게한다고 말하고 있습니까? 내가 일하는 곳마다 모든 단일 테이블에 대한 공간 인덱스가 있고 그것이 나쁜 습관인지 궁금합니다.
Luffydude

13

으로 unicoletti는 말했다 당신은 WHERE 식 ST_Contains와 ()를 사용하는 경우, 형상 열에서 요점 지수에만 작동합니다.

예를 들어, 서로 포함 된 모든 다각형을 알고 싶다면 다음과 같이 사용할 수 있습니다.

SELECT a.gid, b.gid
FROM table AS a, table as b
WHERE a.gid != b.gid and ST_Contains(a.way, b.way)

이 경우 테이블의 크기와 형상의 복잡성에 따라 ST_Contains가 경계 상자를 비교하여 다각형을 필터링하여 시작하여 실제로 전체 형상을 확인하므로 요지 인덱스의 속도가 크게 향상됩니다. OpenGeo Tutorial 에서 작은 설명을 볼 수 있습니다 .


예, 인덱스 경계 테스트를 수행하려면이 쿼리가 필요합니다. 알렉산드르 (나는 그가 빠르고 문제를 해결 했으므로 unicoletti를 해결책으로 표시 할 것입니다)
MichiMichbeck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.