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 ordenación no necesariamente está penalizado, esto depende de lo que el planificador de consulta. Dado que este caso de uso es crucial para el rendimiento de la paginación, hay algunas optimizaciones (ver enlace arriba). Esto es cierto en postgres así "ORDER BY ... límite puede hacerse sin clasificar" E.7.1. Last bullet
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 |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
Rechazaría esto varias veces si pudiera, todas las demás respuestas tienen errores. Esto es lo que habría publicado también. –
Tenga en cuenta que la respuesta de @chaos a la que me refiero se ha eliminado. –
¡Gracias! ¿Cuántos registros tendrá que escanear el motor para obtener la respuesta? ¿Es n? o m = la ubicación de val desde la parte superior? – Nir