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) );