4.5. Árvores de Partição do Espaço no PostgreSQL com PostGIS
O PostGIS implementa o suporte a árvores de partição através do mecanismo SP-GiST do PostgreSQL. Para criar um índice espacial associado a uma coluna geométrica, podemos usar o comando CREATE INDEX
com seguinte sintaxe:
CREATE INDEX <nome-indice> ON <nome-tabela> USING SPGIST ( <coluna-geometrica> );
A opção USING SPGIST
indica que o método de indexação a ser usado na criação do índice deverá ser baseado no SP-GiST. Desta forma, o índice criado será uma Quadtree no caso do tipo GEOMETRY
do PostGIS.
Esse tipo de índice suporta os mesmos operadores listados na Seção 4.3: <<
, >>
, <<|
, |>>
, &<
, &>
, &<
, |&>
, &&
, @
, ~
e ~=
.
Nota
A sintaxe acima cria um índice bidimensional. Para criar um índice \(n\text{-dimensional}\) para tipos geométricos 3D, com \(n > 2\), podemos utilizar a seguinte sintaxe:
CREATE INDEX <nome-indice> ON <nome-tabela> USING SPGIST (<coluna-geometrica> spgist_geometry_ops_nd);
Dica
Ao criar um índice espacial, lembre-se de atualizar as estatísticas da tabela:
ANALYZE <nome-tabela>
ou:
VACUUM ANALYZE <nome-tabela>
4.5.1. Exercícios
Exercício 1. Vamos reindexar a tabela pts_pgis
criada na Seção 4.3.1 usando um índice do tipo SP-GiST sobre a coluna geométrica:
DROP INDEX pts_pgis_geom_idx;
ANALYZE pts_pgis;
CREATE INDEX pts_pgis_geom_idx ON pts_pgis USING SPGIST ( geom );
ANALYZE pts_pgis;
Vamos verificar novamente como a seguinte consulta é realizada:
EXPLAIN ANALYZE
SELECT *
FROM pts_pgis
WHERE ST_Intersects( geom, ST_MakeEnvelope(1.0, 1.0, 2.0, 2.0, 4326) );