sql >> Base de Datos >  >> RDS >> Mysql

Optimización de MySQL ORDER BY en un cálculo compartido con WHERE

No, el cálculo no se realizará dos veces si se escribe exactamente de la misma manera. Sin embargo, si su objetivo es mejorar el rendimiento de su aplicación, es posible que desee ver el panorama general en lugar de concentrarse en este detalle menor que podría darle como máximo un factor de diferencia de dos. Un problema más grave es que su consulta impide el uso eficiente de los índices y dará como resultado un análisis completo.

Le recomendaría que cambie su base de datos para que use el tipo de geometría y cree un índice espacial sobre tus datos Luego puede usar MBBRinterior para encontrar rápidamente los puntos que se encuentran dentro del cuadro delimitador de su círculo. Una vez que haya encontrado esos puntos, puede ejecutar su prueba de distancia más costosa solo en esos puntos. Este enfoque será significativamente más rápido si su tabla es grande y una búsqueda típica devuelve solo una pequeña fracción de las filas.

Si no puede cambiar el modelo de datos, aún puede mejorar el rendimiento utilizando primero una casilla delimitadora, por ejemplo WHERE x BETWEEN 10 AND 20 AND y BETWEEN 50 AND 60 . La verificación del cuadro delimitador podrá usar un índice, pero debido a que los índices R-Tree solo se admiten en el tipo de geometría, tendrá que usar el índice B-Tree estándar que no es tan eficiente para este tipo de consulta (pero aún mucho mejor de lo que está haciendo actualmente).