Objetivos
Conocer los fundamentos de la indexación espacial
Aprender a crear índices GiST
indexación espacial
La indexación espacial es una de las funcionalidades más importantes de las bases de datos espaciales
¡Se deben usar cuando las tablas exceden de algunos miles de filas!
Índices espaciales
La caja (box) es el rectángulo definido por las máximas y mínimas coordenadas x e y de una geometría.
Índices espaciales
En la figura se puede observar que solo la linea intersecta a la estrella amarilla, mientras que si utilizamos los índices comprobaremos que la caja amarilla es intersectada por dos figuras la caja roja y la azul. El camino eficiente para responder correctamente a la pregunta ¿qué elemento intersecta la estrella amarilla? es primero responder a la pregunta ¿qué cajas intersectan la caja amarilla? usando el índice (consulta rápida) y luego calcular exactamente ¿quien intersecta a la estrella amarilla? sobre el resultado de la consulta de las cajas.
crear un índice espacial
La síntaxis será la siguiente::
CREATE INDEX [Nombre_del_indice] ON [Nombre_de_tabla] USING GIST ([campo_de_geometria]);
Esta operación puede requerir bastante tiempo en tablas de gran tamaño.
planificador
El planificador de PostgreSQL debe averiguar que el uso de los índices beneficia a las búsquedas. Se debe obligar al sistema a que actualice sus estadísticas.
vacuum analyze
VACUUM ANALYZE [nombre de la tabla]
VACUUM ANALYZE [nombre de la tabla] (nombre de la columna)
Esta orden actualiza las estadísticas del planificador y elimina los datos borrados(al eliminar con DELETE no se borran los datos de la tabla si no que se marcan como eliminados)
vacuum
VACUUM [nombre de la tabla]
VACUUM [nombre de la tabla] (nombre de la columna)
Esta orden simplemente elimina los datos borrados pero no actualiza las estadísticas
autovacuum
Autovacuum ejecuta las operaciones de VACUUM de manera automática
Una vez creado el índice, hemos de obligar al planificador a actualizar las estadísticas
uso del índice
Para usar el índice debemos incluir el operador && en nuestras consultas
Para las geometrías, el operador && significa “la caja que toca (touch) o superpone (overlap)” de la misma manera que para un número el operador = significa “valores iguales”
explain
PostgreSQL ofrece el comado EXPLAIN para mostrar el plan de ejecución, los pasos que sigue a la hora de ejecutar la consulta SQL
EXPLAIN [ANALYZE] [VERBOSE] sentenciaSQL
operador de cajas
Muchas de las operaciones habituales de PostGIS dispone de operador de cajas, por ejemplo:
ST_Intersects VS _ST_Intersects