Краткий ответ: Нет. При таком типе запроса UPDATE мы обновляем каждую строку в locations
(«Seq Scan»), и индекса GiST в the_geom
in regions
достаточно, чтобы помочь ограничить строки для ST_Within
условия, из которого нужно выполнить пару правой строки regions
.
Более длинный ответ: магия для выяснения этого состоит в сравнении того, что вы получаете из запроса объяснения . В pgAdmin III есть кнопка «Объяснить запрос» в верхней части редактора запросов, или из pgsql, просто добавьте префикс к вашему запросу «объяснение»:
postgis=# explain UPDATE locations SET region_id =
postgis-# (SELECT id FROM regions
postgis(# WHERE ST_Within(locations.the_geom, regions.the_geom)
postgis(# );
QUERY PLAN
--------------------------------------------------------------------------------------------
Seq Scan on locations (cost=0.00..8755.54 rows=1000 width=110)
SubPlan 1
-> Index Scan using regions_gist_the_geom on regions (cost=0.00..8.52 rows=1 width=4)
Index Cond: ($0 && the_geom)
Filter: _st_within($0, the_geom)
(5 rows)
Вам не нужно понимать все, что здесь кашляет. Ключевая вещь, которую нужно увидеть здесь, в самой внутренней части (SubPlan 1), она указывает «Индекс» (= использует индекс, который может значительно ускорить процесс), а не «Сканирование последовательности» (= сканирование последовательности, то есть проверка каждого строка, чтобы увидеть, если это внутри, что может быть медленнее). Если вы добавляете / удаляете индекс GiST locations
, выходные данные этого запроса объяснения точно такие же, поэтому производительность запроса должна быть одинаковой.
Однако, если вы делаете что-то глупое и удаляете свой индекс GiST regions
, вы видите другой план запроса из того же запроса, что и выше:
QUERY PLAN
---------------------------------------------------------------------
Seq Scan on locations (cost=0.00..74288.00 rows=1000 width=110)
SubPlan 1
-> Seq Scan on regions (cost=0.00..74.05 rows=1 width=4)
Filter: (($0 && the_geom) AND _st_within($0, the_geom))
(4 rows)
Важная вещь, которую нужно увидеть между двумя запросами объяснения, - это максимальные оценки стоимости. Сравните 74,05 здесь с 8,52 ранее, поэтому можно ожидать, что этот запрос будет медленнее.