2010-02-12 12 views
11

Quiero saber la alternativa de la palabra clave TOP como en MySQL. He leído sobre TOP en SQL Server.¿Existe una alternativa a TOP en MySQL?

¿Existe alguna alternativa a esto en MySQL, o cualquier otro método en MySQL del cual podamos obtener la misma funcionalidad?

Respuesta

18

de pedido y la limitación de los resultados:

SELECT field1, field2 
FROM myTable 
ORDER BY field1 ASC 
LIMIT 10 
+0

Esta es la respuesta correcta, pero debe revisar la respuesta de Pascal MARTIN para una comprensión más profunda. – HPWD

0

sí, existe la cláusula limit.

Ejemplo:

SELECT * FROM `your_table` LIMIT 0, 10 

Esto mostrará los primeros 10 resultados de la base de datos.

+0

@Pascal: elogiándolo, me gustan sus respuestas exhaustivas y también es rápido, no hombre, ¿ves? Puse mi comentario en la respuesta de pascal :) – Sarfraz

3

Usted puede utilizar la palabra clave LIMIT(Véase la documentation of the SELECT instruction) - que va al final de la consulta:

select * 
from your_table 
where ... 
limit 10 

para obtener los mejores 10 líneas


O incluso:

select * 
from your_table 
where ... 
limit 5, 10 

Para obtener 10 líneas, comience desde la 6ª (es decir obteniendo las líneas 6 a 15).

+0

¿Manipulará todos los datos de la tabla ...? – Avinash

+1

Este hombre siempre es tan genial y rápido con sus respuestas, gran cosas hombre :) – Sarfraz

+0

@Avinash: No estoy seguro de poder dar una respuesta definitiva que sea cierta para cada situación, pero, en algún caso, manipulará más datos que te gustaría * (por ejemplo, cuando hay una cláusula 'order by', el' limit' solo puede aplicarse después de que se haya calculado 'order by', obviamente) * ;;; @Sarfraz: gracias ;-) –

2

Sé que esta pregunta ha sido respondida por me gustaría añadir algunas consideraciones de rendimiento. El operador TOP en MySQL no se traduce con LIMIT.

Suponga que desea obtener los últimos 10 personas insertadas en el PP:

SELECT name, id 
FROM persons 
ORDER BY id DESC 
LIMIT 10 

Sin embargo, esto podría hecho muy lento cuando se utilizan miles de filas.

Una solución mucho más rápida sería recuperar el número actual de X de filas:

SELECT COUNT(*) FROM persons 

y utilizar ese número para consultar el último 10:

SELECT name, id 
    FROM persons 
    LIMIT x-10,10 

Así límite se saltará la primera X -10 filas y devuelva las siguientes 10. Esto fue 100 veces más rápido para mí que ordenar la columna, pero esta es solo mi experiencia.

+0

¿Ha considerado el tiempo que pasó en 'SELECT COUNT (*) FROM persons'? –

+0

No debe confiar en la clasificación predeterminada: http://stackoverflow.com/a/8746712/358813 No es determinista. – tacone

Cuestiones relacionadas