2009-01-18 16 views
69

Cuando agrego LIMIT 1 a una consulta de MySQL, ¿se detiene la búsqueda después de encontrar 1 resultado (por lo que es más rápido) o lo hace todavía obtener todos los resultados y trunca al final?¿Agregar 'LIMIT 1' a las consultas de MySQL las hace más rápidas cuando sabes que solo habrá 1 resultado?

+0

No si hay un UNIQUE' (o 'PRIMARIA KEY')' restricción (o índice) en la columna de filtro. http://stackoverflow.com/questions/8467092/does-using-limit-1-speed-up-a-query-on-a-primary-key – ma11hew28

Respuesta

61

Dependiendo de la consulta , agregar una cláusula de límite puede tener un gran efecto en el rendimiento. Si solo desea una fila (o sabe de hecho que solo una fila puede satisfacer la consulta), y no está seguro de cómo la ejecutará el optimizador interno (por ejemplo, la cláusula WHERE que no da en un índice, etc.), entonces definitivamente deberías agregar una cláusula LIMIT.

En cuanto a consultas optimizadas (usando índices en tablas pequeñas) probablemente no importará mucho en rendimiento, pero de nuevo, si solo está interesado en una fila, agregue una cláusula LIMIT.

+24

Para evitar problemas, es posible que desee considerar enviar LIMIT 2 y luego quejarse o bombardear si su suposición de una sola fila no se cumple. –

+5

@JeffreyHantin Si realmente puede haber solo uno, debería preferir agregar una restricción única a la base de datos. Mucho más limpio que estropear tu código con chequeos de cordura. –

+0

@CristianVrabie Si se puede expresar como una restricción única, claro, pero eso es una afirmación sobre los datos en las tablas. Enviar LÍMITE 2 y verificar 1 es una afirmación sobre la consulta en sí misma, que bien puede contener un error, como una condición de unión inadecuadamente especificada. –

1

Si realmente sólo se espera un resultado único, lo que realmente tiene sentido para añadir el límite a su consulta. No conozco el funcionamiento interno de MySQL, pero estoy seguro de que no reunirá un conjunto de resultados de 100 000 registros para truncarlo a 1 al final.

16

límite puede afectar el rendimiento de la consulta (ver comentarios y el enlace más abajo) y también se reduce el conjunto de resultados que se emite por MySQL. Para una consulta en la que espera un solo resultado, hay beneficios.

Por otra parte, lo que limita el conjunto de resultados puede en la velocidad de hecho, el tiempo total de la consulta como la transferencia de grandes conjuntos de resultados utilizar la memoria y potencialmente crear tablas temporales en el disco. Menciono esto porque recientemente vi una aplicación que no usaba Limitar matar a un servidor debido a los enormes conjuntos de resultados y, con el límite establecido, la utilización de los recursos disminuyó enormemente.

Marque esta página para más detalles: MySQL Documentation: LIMIT Optimization

+0

La página que vinculó dice: "Si selecciona solo unas pocas filas con LIMIT, MySQL usa índices en algunos casos cuando normalmente preferiría hacer un escaneo de tabla completo". Eso no parece que la consulta en sí misma siempre se procese como de costumbre. – che

+0

buen punto. Estaba haciendo una generalización basada en observaciones del uso de EXPLAIN. Gracias por la captura. – rjamestaylor

5

Si sólo hay 1 resultado regresando, entonces no, LÍMITE no hacerlo más rápido. Si hay muchos resultados, y solo necesita el primer resultado, y no hay instrucciones GROUP u ORDER by, LIMIT lo hará más rápido.

+0

Debería ser más rápido incluso con 1 fila, si no hay claves únicas/principales, porque deja de buscar después de encontrar la primera aparición –

0

La respuesta, en resumen, es sí. Si limita su resultado a 1, incluso si está "esperando" un resultado, la consulta será más rápida porque su base de datos no revisará todos sus registros. Simplemente se detendrá una vez que encuentre un registro que coincida con su consulta.

Cuestiones relacionadas