2012-01-26 13 views

Respuesta

35

La manera más eficiente sería comparar tu marca de tiempo (y solo marca de tiempo, sin usar ninguna función) en una expresión que se puede calcular como constante para cada fila, de esta manera mysql puede usar el índice definido en tu columna de marca de tiempo .

SELECT * FROM myTable 
WHERE last_seen >= NOW() - INTERVAL 10 MINUTE 

Siempre puede intentar EXPLAIN SELECT ... para ver si un índice puede ser usado para encontrar las filas que satisfacen su condición WHERE sin la necesidad de revisar cada fila de la tabla.

3

Su pregunta se refiere a los registros dentro de los 10 minutos de la fecha y hora actual, pero voy a tomar eso en el sentido de no más de diez minutos en el pasado (no el futuro):

SELECT col1, col2, col3 
FROM table 
WHERE DATE_ADD(last_seen, INTERVAL 10 MINUTE) >= NOW(); 

Esto se suma a 10 minutos a last_seen y lo compara con la hora actual. Si el valor es mayor, last_seen es hace menos de diez minutos.

Consulte el documentation on DATE_ADD() para obtener una explicación de cómo se usa.

+1

Esto falla como la forma más eficiente. – piotrm

Cuestiones relacionadas