Eu tenho uma tabela espacial em um banco de dados PostgreSQL / PostGIS. Cada linha nela representa um polígono. É da seguinte forma:
+----+--------+
|gid | way |
+----+--------+
|241 | 01030..|
A coluna geométrica é "caminho", que contém a geometria de um polígono. No WKT é: POLYGON (('....')). Estou fazendo muitas consultas ST_Contains nesta tabela, para testar se dois polígonos estão contidos um no outro, por exemplo:
Select ST_Contains(a.way, b.way) From table AS a, table AS b Where a.gid = 15 And b.gid = 16
Eu queria saber como acelerar esta consulta e adicionou um índice espacial na tabela:
CREATE INDEX table_way_gist ON table USING gist(way);
Mas, na verdade, não vejo velocidade. Eu crio o índice APÓS Preencher a tabela com todos os polígonos ANTES de fazer as consultas ST_Contains. O índice deve ser adicionado antes de preencher uma tabela? Existem requisitos especiais na tabela para trabalhar com o índice? A projeção (srid) do caminho da coluna geométrica é definida como 900913.
Estou usando: psql (PostgreSQL) 9.1.4 / POSTGIS = "1.5.3"
fonte
Como disse unicoletti , o índice de essência na coluna geometria só funcionaria se você usar ST_Contains () na expressão WHERE.
Por exemplo, se você gostaria de conhecer todos os polígonos que contêm um ao outro, poderia usar algo como isto:
Nesse caso, dependendo do tamanho da sua tabela e da complexidade de suas geometrias, o índice de essência deve fornecer uma velocidade significativa, pois ST_Contains começará a filtrar os polígonos comparando suas caixas de limite antes de realmente verificar suas geometrias completas. Você pode ver uma pequena explicação no Tutorial do OpenGeo .
fonte