2011-07-21 11 views
6

utilizo MySQL versión 5.5.14 del servidor y ahora estoy tratando esta simple consulta SQL con Explica comando:Comando mySQL ¿Explicar ignorar LIMIT?

EXPLAIN SELECT id, name, thumb FROM `twitter_profiles` LIMIT 10; 

y me muestra este resultado:

+----+-------------+-------+------+---------------+------+---------+------+-------+-------+ 
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+ 
| 1 | SIMPLE  | tp | ALL | NULL   | NULL | NULL | NULL | 40823 |  | 
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+ 
1 row in set (0.02 sec) 

Mi pregunta es por qué se escanea toda la tabla en lugar de tomar las primeras 10 filas como lo especifiqué en la cláusula LIMIT?

¡Gracias por su asesoramiento con anticipación!

Cheers,

Jakub

Respuesta

10

aquí un buen enlace del artículo sobre MySQL EXPLAIN limits and errors

límite no se toma en cuenta al estimar el número de filas Incluso si tiene límite que restringe el número de filas serán examinados MySQL seguirá imprimir el número total

+0

@Evgi Aha, pero solo se trata del proceso de estimación, ¿no? En frente, mysql solo tomará las 10 filas mencionadas, ¿es verdad? –

+1

sí es cierto :) :) –

+1

@Jakub, a menos que agregue una cláusula ORDER BY, que es el caso habitual (de lo contrario, sus 10 filas no son aleatorias ni deterministas). Necesita recuperar todas las filas coincidentes para ordenarlas, incluso si finalmente no se envían al cliente. –

-3

es necesario utilizar ordenado por ..

EXPLAIN SELECT id, name, thumb FROM twitter_profiles ORDER BY LIMIT 10; 

Hope esto le ayudará a cabo.

+5

Esto ni siquiera es SQL válido. –

Cuestiones relacionadas