Коротка відповідь: Ні . З цим типом UPDATE запиту, ми оновлюємо кожен рядок locations
( «Seq сканування»), а індекс GiST на the_geom
в 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), вона вказує на "Index" (= використовує індекс, який може значно прискорити роботу), а не "Seq Scan" (= сканування послідовностей, тобто перевірка кожного рядок, щоб побачити, чи знаходиться всередині, що може бути повільніше). Якщо ви додаєте / видаляєте індекс 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, тому ви очікуєте, що цей запит буде повільнішим.