mysql selecciona desde n últimas filas

Tengo una tabla con índice (autoincrement) y valor entero. La tabla tiene millones de filas de largo.

¿Cómo puedo buscar si un determinado número aparece de la manera más eficiente en las últimas n filas de la tabla?

A partir de la respuesta dada por @chaos, pero con algunas modificaciones:

  • Siempre debe usar ORDER BY si usa LIMIT . No hay un orden implícito garantizado para una tabla RDBMS. Por lo general, puede obtener filas en el orden de la clave principal, pero no puede confiar en esto, ni es portátil.

  • Si realiza un pedido en orden descendente, no necesita saber el número de filas en la tabla de antemano.

  • Debe dar un nombre de correlación (también conocido como alias de tabla) a una tabla derivada.

Aquí está mi versión de la consulta:

 SELECT `id` FROM ( SELECT `id`, `val` FROM `big_table` ORDER BY `id` DESC LIMIT $n ) AS t WHERE t.`val` = $certain_number; 

Puede ser una respuesta muy tardía, pero esto es bueno y simple.

 select * from table_name order by id desc limit 5 

Esta consulta arrojará un conjunto de los últimos 5 valores (últimas 5 filas) que ha insertado en su tabla

Las últimas 5 filas se recuperan en mysql

Esta consulta funciona perfectamente

 SELECT * FROM (SELECT * FROM recharge ORDER BY sno DESC LIMIT 5)sub ORDER BY sno ASC 

o

 select sno from(select sno from recharge order by sno desc limit 5) as t where t.sno order by t.sno asc 

Aproveche SORT y LIMIT como lo haría con la paginación. Si quiere el i-ésimo bloque de filas, use OFFSET.

 SELECT val FROM big_table where val = someval ORDER BY id DESC LIMIT n; 

En respuesta a Nir: la operación de clasificación no está necesariamente penalizada, esto depende de lo que haga el planificador de consultas. Dado que este caso de uso es crucial para el rendimiento de la paginación, hay algunas optimizaciones (ver enlace arriba). Esto también es cierto en postgres: “ORDER BY … LIMIT se puede hacer sin ordenar” E.7.1. Última viñeta

 explain extended select id from items where val = 48 order by id desc limit 10; +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+ | 1 | SIMPLE | items | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index | +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+ 

porque es autoincrement, aquí está mi opinión:

 Select * from tbl where certainconditionshere and autoincfield >= (select max(autoincfield) from tbl) - $n 

Sé que esto puede ser un poco viejo, pero intenta usar PDO::lastInsertId . Creo que hace lo que quiere, pero tendría que volver a escribir su aplicación para usar PDO (que es mucho más seguro contra los ataques)

    Intereting Posts