resueltos rendimiento plan optimizar optimización optimizacion mejorar lentas inner ejercicios ejecución datos consultas sql mysql database

rendimiento - optimizar inner join sql server



¿Limitar la consulta a un registro a mejorar el rendimiento? (6)

¿Limitará una consulta a un registro de resultados, mejorará el rendimiento en una tabla MySQL grande (ish) si la tabla solo tiene un resultado coincidente?

por ejemplo

select * from people where name = "Re0sless" limit 1

si solo hay un registro con ese nombre? y ¿qué pasa si el name fue la clave principal / establecido en único? ¿Vale la pena actualizar la consulta o la ganancia será mínima?


Creo que LIMIT es algo que se hace después de que se encuentra el conjunto de datos y se está formando el conjunto de resultados, por lo que no esperaría que hiciera ninguna diferencia. Hacer nombre de la clave principal tendrá un efecto positivo significativo, ya que dará como resultado un índice para la columna.


Para responder a sus preguntas en orden: 1) sí, si no hay índice en el nombre. La consulta terminará tan pronto como encuentre el primer registro. quítese el límite y tiene que hacer un escaneo completo de la tabla cada vez. 2) no. las llaves primarias / únicas tienen la garantía de ser únicas. La consulta debería dejar de ejecutarse tan pronto como encuentre la fila.


Sí, notará una diferencia de rendimiento al tratar con los datos. Un registro ocupa menos espacio que múltiples registros. A menos que trabaje con muchas filas, esto no supondría una gran diferencia, pero una vez que ejecuta la consulta, los datos tienen que volver a mostrarse, lo cual es costoso o se trata programáticamente. De cualquier manera, un registro es más fácil que múltiple.


Si "nombre" es único en la tabla, aún puede haber una ganancia (muy muy mínima) en el rendimiento al poner la restricción de límite en su consulta. Si el nombre es la clave principal, probablemente no habrá ninguna.


Si la columna tiene

un índice único: no, no es más rápido

un índice no único: tal vez, porque evitará enviar más filas más allá del primer emparejado, si existe alguno

sin índice: a veces

  • si 1 o más filas coinciden con la consulta, , porque la exploración de la tabla completa se detendrá después de que se haya hecho coincidir la primera fila.
  • si no hay filas que coincidan con la consulta, no , porque tendrá que completar una exploración completa de la tabla

Si tiene una consulta un poco más complicada, con una o más uniones, la cláusula LIMIT proporciona al optimizador información adicional. Si espera unir dos tablas y devolver todas las filas, una combinación de hash es generalmente óptima. Una combinación de hash es un tipo de unión optimizada para grandes cantidades de coincidencia.

Ahora, si el optimizador sabe que ha pasado LIMIT 1, sabe que no procesará grandes cantidades de datos. Puede volver a una unión de bucle .

Según la base de datos (e incluso la versión de la base de datos), esto puede tener un gran impacto en el rendimiento.