¿Cuál es la forma más eficiente de seleccionar las últimas n filas en una tabla con mySQL? La tabla contiene millones de filas, y en un momento dado no sé cuán grande es la tabla (está en constante crecimiento). La tabla tiene una columna que se incrementa automáticamente y se usa como un identificador único para cada fila.¿Cuál es la forma más eficiente de seleccionar las últimas n filas en una tabla sin cambiar la estructura de la tabla?
Respuesta
SELECT * FROM table_name ORDER BY auto_incremented_id DESC LIMIT n
Uso ORDER BY para ordenar por la columna de identificador con el fin DESC, y limitar el uso para especificar el número de resultados que desea.
Tal vez pedirlo por la única descendente Identificación:
SELECT * FROM table ORDER BY id DESC LIMIT n
El único problema con esto es que es posible que desee seleccionar en un orden diferente, y este problema me ha hecho que seleccionar las últimas filas de contar el número de filas y luego seleccionarlas usando LIMIT, pero obviamente esa no es una buena solución en su caso.
También es probable que desee agregar un índice descendente (o lo que sea que se les llame en mysql) y seleccionarlo rápidamente si es algo que va a hacer a menudo.
hecho de la manera correcta para obtener la última n filas con el fin es el uso de una subconsulta:
(SELECT id, title, description FROM my_table ORDER BY id DESC LIMIT 5)
ORDER BY tbl.id ASC
Como esta es la única manera que sé que les va a volver en el orden correcto. La respuesta aceptada es en realidad una solución para "Seleccione las primeras 5 filas de un conjunto ordenado por ID descendente", pero eso es probablemente lo que necesita.
Esto es mucho más rápido cuando tiene mesas grandes porque no tiene que pedir una mesa completa. Solo usa id como un identificador de fila único. Esto también es más eficiente cuando tiene grandes cantidades de datos en algunas colum (s) como imágenes, por ejemplo (blobs). El orden en este caso puede consumir mucho tiempo y datos.
select *
from TableName
where id > ((select max(id) from TableName)-(NumberOfRowsYouWant+1))
order by id desc|asc
El único problema es si elimina las filas en el intervalo que desee. En este caso, no obtendrás el verdadero "NumberOfRowsYouWant".
También puede usarlo fácilmente para seleccionar n filas para cada página simplemente multiplicando (NumberOfRowsYouWant + 1) por número de página cuando necesite mostrar la tabla al revés en varias páginas web.
(Similar a la respuesta "marco" s,)
mi favorito es el máximo() - Función de MySQL también, de una forma sencilla de una sola línea, pero hay otras formas de seguro:
SELECT whatever FROM mytable WHERE id > (SELECT max(id)-10 FROM mytable);
... y obtiene "la última identificación menos 10", normalmente las últimas 10 entradas de esa tabla.
Es una manera corta de evitar el error 1111 ("Uso no válido de la función de grupo") no solo si hay una fila auto_increment (aquí id).
La función max() se puede usar de muchas maneras.
Analicé todas las respuestas con mi tabla de más de un millón de resultados y esta fue la más rápida . En realidad, 10 milisegundos más rápido que ordenar por ID. –
Aquí puede cambiar el nombre de la tabla y el nombre de la columna según sus necesidades. si quiere mostrar la última fila de 10, ponga n = 10, n = 20 o n = 30 ... etc. según sus necesidades.
seleccionar * de (seleccionar * de empleado Ordenar por emp_id límite desc n) una Orden por asc emp_id;
- 1. MYSQL Seleccionar de la tabla, obtener las últimas/últimas 10 filas en la tabla
- 2. mysql seleccionar desde n últimas filas
- 3. Seleccionar n filas aleatorias de la tabla de SQL Server
- 4. ¿Cuál es la forma más rápida de seleccionar una tabla completa en SQL Server?
- 5. La forma más eficiente de obtener el recuento de filas de la tabla
- 6. ¿Cuál es la manera más eficiente de contar filas en una tabla en SQLite?
- 7. cuál es la forma recomendada de guardar una matriz M por N en la tabla sql
- 8. jQuery - cómo seleccionar todas las filas de la tabla entre dos filas de la tabla en la misma mesa
- 9. Manera eficiente de actualizar todas las filas en una tabla
- 10. ¿Cuál es la forma más eficiente de hacer tabla de consulta en C#
- 11. ¿Cuál es la forma más rápida de sondear una tabla MySQL para nuevas filas?
- 12. Seleccionar filas aleatorias de la tabla MySQL
- 13. Copie la estructura de la tabla en la nueva tabla
- 14. Crear una tabla (estructura) de la tabla
- 15. seleccionar las filas de la tabla utilizando fin árbol
- 16. ¿Cómo selecciono las últimas 5 filas en una tabla sin ordenar?
- 17. ¿Cómo puede una exploración de tabla devolver más filas de las que están en la tabla?
- 18. ¿Cuál es la forma más fácil de crear una tabla de Excel con C#?
- 19. La forma más eficiente de seleccionar miles de filas de una lista de identificadores
- 20. ¿Cuál es la forma más eficiente de mover/cambiar el nombre de un nodo en NetworkX?
- 21. Cuál es la forma más eficiente de insertar miles de registros en una tabla (MySQL, Python, Django)
- 22. Borrar todas las filas en la tabla
- 23. Recuperar N últimas filas de un mysqldump
- 24. ¿Cuál es la forma más sencilla de permitir que un usuario arrastre y suelte las filas de la tabla para cambiar su orden?
- 25. Cómo seleccionar las primeras n filas de una tabla de datos/vista de datos en ASP.NET
- 26. ¿Cómo actualizo n filas en una tabla?
- 27. ¿Cuál es la forma más segura de convertir la tabla con InnoDB a MyISAM?
- 28. ¿Cuál es la forma más limpia de ordenar los resultados de la consulta "describir la tabla"?
- 29. Seleccionar mayoría de los Estados Recientes De la Tabla Historia
- 30. seleccionar filas en una tabla, excepto las filas del encabezado de tabla
Quizás tarde, pero acabo de encontrar desde [aquí] (http://www.mysqlfaqs.net/mysql-faqs/Tricky-Select-Queries/How-to-get-last-top-records-in -ordenar-orden) que simplemente puede omitir la selección externa y el alias, y solo tiene: '(SELECCIONAR * FROM table ORDER BY id DESC LIMIT 50) ORDER BY id ASC;' aunque puede ser un poco confuso de leer. – DiegoDD
@DiegoDD que es realmente limpio, es mucho mejor que la solución de la mina y no es tan confuso, lo agregaré a mi respuesta :) –