1 votos

MySQL 8 MBRIntersects 10 veces más lento que el equivalente PostGIS

Estoy tratando de migrar una base de datos PostGIS a MySQL 8 y estoy teniendo un gran golpe de rendimiento cuando se trata de MBRIntersects.

Utilizando Mapbox para renderizar mosaicos vectoriales, necesito extraer la geometría que interseca algún cuadro delimitador específico de un total de 80k características.

En PostGIS, utilizando la siguiente consulta obtengo un tiempo de ejecución total de ~230ms ( ~30ms para consultas posteriores, ya que es probable que los resultados se almacenen en caché)

 SELECT gid, ST_AsGeoJson(geom)
 FROM table
 WHERE geom && ST_MakeBox2D(ST_MakePoint(), ST_MakePoint())::geometry;

Sin embargo, en MySQL 8, utilizando la siguiente consulta obtengo un tiempo de ejecución total de ~620ms y no parece que se esté produciendo ningún almacenamiento en caché, ya que las consultas posteriores tardan lo mismo.

SELECT gid, ST_AsGeoJson(geom)
FROM table
WHERE MBRIntersects(ST_PolygonFromText(), ST_SRID(geom, 0));

En EXPLAIN de la consulta anterior no muestra ningún índice utilizado. La tabla se creó como se describe a continuación:

CREATE TABLE IF NOT EXISTS table (
    gid INT PRIMARY KEY AUTO_INCREMENT
);
ALTER TABLE table
ADD COLUMN geom MultiPolygon NOT NULL SRID 4326,
ADD SPATIAL INDEX(geom);

Como ventaja, la consulta PostGIS devuelve 3 filas, a diferencia de MySQL que sólo devuelve 2.

¿Hay algo que esté haciendo mal? ¿Existe una forma mejor de consultar los mosaicos del mapa?

1voto

Si desea que el índice que se utiliza tiene que convertir su ST_PolygonFromText() a SRID 4326 no el geom a SRID 0. Dicho esto, al menos para mí esto será aún más lento aunque el uso de un índice. No se si esto es intencionado o un bug.

0voto

SocraticParadox Puntos 21

MBRIntersects y ST_Intersects están rotos en MySQL 8.0 (probado en 8.0.15) y son más de 10 veces más lentos comparados con MySQL 5.7. Para mí deshabilitar el uso del índice espacial (usando IGNORE INDEX forzando un escaneo completo de la tabla, acelera un poco mis consultas. Véase este informe de error https://bugs.mysql.com/bug.php?id=94655

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