Kurze Antwort: Nein. Bei dieser Art von UPDATE-Abfrage aktualisieren wir jede Zeile in locations
("Seq Scan"), und der GiST-Index auf the_geom
in regions
reicht aus , um die Anzahl der Zeilen zu begrenzen, aus denen die ST_Within
Bedingung die richtige Zeile koppeln soll regions
.
Längere Antwort: Die Magie, um dies herauszufinden, besteht darin, zu vergleichen, was Sie aus der Erklärungsabfrage erhalten . In pgAdmin III befindet sich oben in einem Abfrageeditor die Schaltfläche "Abfrage erklären". In pgsql wird Ihrer Abfrage einfach "EXPLAIN" vorangestellt:
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)
Sie müssen nicht alles verstehen, was hier oben gehustet wird. Das Wichtigste, was hier zu sehen ist, ist, dass im innersten Teil (SubPlan 1) "Index" (= verwendet einen Index, der die Dinge erheblich beschleunigen könnte) und nicht "Seq Scan" (= Sequenz-Scan, dh jeder überprüft) angezeigt wird Zeile, um zu sehen, ob es innerhalb ist, was langsamer sein kann). Wenn Sie einen GiST-Index hinzufügen / löschen locations
, ist die Ausgabe dieser EXPLAIN- Abfrage genau gleich, daher sollte die Abfrageleistung gleich sein.
Wenn Sie jedoch etwas Dummes tun und Ihren GiST-Index entfernen regions
, wird ein anderer Abfrageplan aus derselben Abfrage wie oben angezeigt :
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)
Das Wichtigste zwischen den beiden Erklärungsabfragen sind die maximalen Kostenschätzungen. Im Gegensatz zu 74,05 hier und 8,52 zuvor sollten Sie also erwarten, dass diese Abfrage langsamer ist.