vistas una soporta segundo rendimiento rapida por para optimizar mas lentas hacer grandes datos cuantas consultas consulta como cantidades mysql sql

una - optimizar consultas mysql explain



¿Cuál es la forma más eficiente de seleccionar las últimas n filas en una tabla sin cambiar la estructura de la tabla? (8)

¿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.


En realidad, la forma correcta de obtener las últimas n filas en orden es usar una subconsulta:

(SELECT id, title, description FROM my_table ORDER BY id DESC LIMIT 5) ORDER BY tbl.id ASC

Como este es el único que sé que los devolverá en el orden correcto. La respuesta aceptada es en realidad una solución para " Seleccionar las primeras 5 filas de un conjunto ordenado por ID descendente ", pero probablemente sea lo que necesita.


Tal vez ordenarlo por el ID único que desciende:

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 obligado a seleccionar las últimas filas contando el número de filas y luego seleccionarlas usando LIMIT, pero obviamente esa no es probablemente una buena solución en tu caso.


También es probable que desee agregar un índice descendente (o lo que sea que se llame en mysql) y seleccionarlo rápidamente si es algo que va a hacer a menudo.


Utilice ORDER BY para ordenar por la columna de identificador en orden DESC, y use LIMIT para especificar cuántos resultados desea.


SELECT * FROM table_name ORDER BY auto_incremented_id DESC LIMIT n


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 tienes 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 filas en el intervalo que desea. En este caso, no obtendrás el verdadero "NumberOfRowsYouWant".

También puede usar esto 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 de "marco",)
my fav es la función máxima () de MySQL también, en un simple trazador de líneas , pero hay otras formas de seguridad:

SELECT whatever FROM mytable WHERE id > (SELECT max(id)-10 FROM mytable);

... y obtiene "última identificación menos 10", normalmente las últimas 10 entradas de esa tabla.

Es un camino corto, para 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.


Aquí puede cambiar el nombre de la tabla y el nombre de la columna según sus requisitos. si quiere mostrar la última fila de 10, ponga n = 10, n = 20 o n = 30 ... etc. según sus necesidades.

select * from (select * from employee Orden por emp_id desc limit n) a Orden por emp_id asc;