index - optimize mysql server
mysql selecciona desde n Ășltimas filas (6)
A partir de la answer dada por @chaos, pero con algunas modificaciones:
Siempre debe usar
ORDER BY
si usaLIMIT
. 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;
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?
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 |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
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
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
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)
porque es autoincrement, aquí está mi opinión:
Select * from tbl
where certainconditionshere
and autoincfield >= (select max(autoincfield) from tbl) - $n