6 votos

ST_DWithin en PostGIS: índice Implícito de la llamada

En PostGIS, la función ST_DWithin incluye automáticamente un cuadro de comparación que va a hacer uso de cualquiera de los índices que están disponibles en la geometría. Esto se hace mediante el mecanismo de inline funciones de SQL. La definición de la función es como sigue.

CREATE OR REPLACE FUNCTION ST_DWithin(geom1 geometry, geom2 geometry, float8)
    RETURNS boolean
    AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ST_Expand($2,$3) 
    AND $2 OPERATOR(@extschema@.&&) @extschema@.ST_Expand($1,$3) 
    AND @extschema@._ST_DWithin($1, $2, $3)'
    LANGUAGE 'sql' IMMUTABLE _PARALLEL;

Por qué es necesario llamar dos veces el ST_Expand función, una para cada geometría? No una sola llamada como en la siguiente definición de ser suficiente?

CREATE OR REPLACE FUNCTION ST_DWithin(geom1 geometry, geom2 geometry, float8)
    RETURNS boolean
    AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ST_Expand($2,$3) 
    AND @extschema@._ST_DWithin($1, $2, $3)'
    LANGUAGE 'sql' IMMUTABLE _PARALLEL;

2voto

Lars Mæhlum Puntos 4569

La razón por la que he entendido es este:

El índice de horquillas mediante el uso de 1 geometría a partir de 1 de los datos de entrada y los conjuntos de pruebas contra el índice de el otro conjunto de datos. Así, la ampliación de la geometría se ha probado en el índice de el otro conjunto de datos.

Si hay sólo 1 de los gometries que se amplió el planificador no sería capaz de utilizar el índice, si se decide a probar de la otra forma. Si se lleva a la no ampliado de la geometría y de la prueba en contra de la ampliación de la geometría no será capaz de utilizar el índice (no hay índices en la ampliación de los cuadros).

Así, es acerca de lo que el planificador elige para poner en el interior y exterior del bucle cuando se prueba.

Digamos que usted tiene un conjunto de datos con 3 geometrías y uno con 1 millón de dólares. A continuación, PostgreSQL intentará comprobar la 3 geometrías contra el índice en el conjunto de datos de 1 millón de dólares. No de otra manera. Entonces, si el conjunto de datos con 1 millón de geometrías de pasar a ser la una con 1 millón de geometrías, el planificador tiene que decidir si se debe comprobar todos los de 1 millón de geometrías en contra de un índice con 3 entradas. Desde que el índice no tiene sentido cuando hay sólo 3 geometrías para la búsqueda es probable que vaya por otro camino y verificación 1 por 1 de el árbol de geometrías contra el 1 millones (ampliado) geometrías incluso si no puede utilizar el índice.

Con la construcción en PostGIS ahora el planificador es libre de elegir en ambos sentidos con búsqueda de índice.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X