내 쿼리에서PostGIS와 쿼리 ST_DUMP을 할 때 요점 인덱스를 사용하지 않는 (ST_Union은
DROP TABLE IF EXISTS tmp;
CREATE TEMP TABLE tmp AS SELECT *, ST_BUFFER(the_geom::GEOGRAPHY, 3000)::GEOMETRY AS buffer FROM af_modis_master LIMIT 20000;
CREATE INDEX idx_tmp_the_geom ON tmp USING gist(buffer);
EXPLAIN SELECT (DUMP(ST_UNION(buffer))).path[1], (DUMP(ST_UNION(buffer))).geom FROM tmp;
출력 EXPLAIN :
Aggregate (cost=1705.52..1705.54 rows=1 width=32)
-> Seq Scan on tmp (cost=0.00..1625.01 rows=16101 width=32)
서열 스캔은 인덱스를 사용하여 바로 왜되지 않음을 의미 ?
(이 질문은 처음 게시 된 사람 : https://gis.stackexchange.com/questions/51877/postgis-query-not-using-gist-index-when-doing-a-st-dumpst-union) 여기 다시 게시하는 것에 대한 사과는 훨씬 활성화되어 있으므로 답변을 빨리 제공 할 수 있습니다.
UPDATE : 심지어 버퍼에 기반 필터 절은 서열 스캔이 발생 어디를 추가 :
ANALYZE tmp;
EXPLAIN SELECT (DUMP(ST_UNION(buffer))).path[1], (DUMP(ST_UNION(buffer))).geom FROM tmp WHERE ST_XMIN(buffer) = 0.0;
쿼리를 실행하기 전에 통계를 업데이트 했습니까? –
아니요,하지만 "ANALYZE tmp;" 인덱스를 만든 직후 EXPLAIN에서 Seq Scan을 얻습니다. – Ries
테이블의 모든 행에서 st_union을 실행하려고합니다. 아마 Postgres는 index를 사용하는 것이 더 빠르지 않을 것이라고 생각합니다. 인덱스는 먼저 where 절에서 일부 Geometry를 선택할 때 사용됩니다. –