2012-01-26 9 views

Odpowiedz

35

Najbardziej efektywnym sposobem byłoby porównanie twojego znacznika czasu (i tylko znacznika czasu, bez użycia jakichkolwiek funkcji na nim) do wyrażenia, które można obliczyć jako stałe dla każdego wiersza, w ten sposób mysql może użyć indeksu zdefiniowanego w kolumnie znacznika czasu .

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

Zawsze można spróbować EXPLAIN SELECT ... aby sprawdzić, czy wskaźnik może być użyte do znalezienia wierszy spełniających warunek WHERE bez konieczności sprawdzenia każdego wiersza w tabeli.

3

Twoje pytanie dotyczy zapisów w ciągu 10 minut od bieżącego datownika, ale wezmę to oznaczać nie więcej niż dziesięć minut w przeszłości (nie przyszłości):

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

Dodaje to 10 minut last_seen i porównuje to z bieżącym czasem. Jeśli wartość jest większa, last_seen jest mniej niż dziesięć minut temu.

Zobacz objaśnienie, w jaki sposób jest używany: .

+1

To nie działa jako "najbardziej efektywny" sposób. – piotrm

Powiązane problemy