2016-12-06 5 views
0

Betrachten Sie zwei Abfragen (eine verwendet DATE() Funktion, um Datum aus Datetime-Feld zu extrahieren und andere nicht).Extrahieren Datum Teil von Datetime wirklich notwendig?

SELECT count(*) 
FROM creatives 
WHERE DATE(creative_last_seen) >= SUBDATE(CURDATE(), 1) 
AND DATE(creative_last_seen) < curdate(); 

Gesamtreaktionszeit: 1 min 19 sec

SELECT count(*) 
FROM creatives 
WHERE creative_last_seen >= SUBDATE(CURDATE(), 1) 
AND creative_last_seen < curdate(); 

Gesamtreaktionszeit: 8,9 sec

Beide Abfragen so weit identische Ergebnisse produzieren als ich sagen kann. Die erste Abfrage wegen der Datumsextraktion benötigt sehr viel Zeit, während die andere wesentlich schneller ist.

Ich dachte zuerst, ich brauchte DATE() Funktion, um die Abfrage zu arbeiten. Aber es scheint ohne die DATE() Funktion gut zu funktionieren. Fehle ich irgendetwas, indem ich die letztere Abfrage verwende?

Antwort

0

Das Datum Typ wird für Werte mit einem Datumsteil verwendet, aber keine Zeit Teil
Der DATETIME- Typ wird für Werte verwendet, die

Als creative_last_seendatetime Datentyp sowohl Datum und Zeit Teile enthalten sie umfassen Zeitanteil, der beim Vergleich berücksichtigt wird.

Wenn Sie daran interessiert sind nur in date Vergleich nicht time sind Sie die erste Abfrage

verwenden können, wenn Sie das time Teil möchte, sollte dann mit der zweiten Abfrage

DEMO

gehen beim Vergleich berücksichtigt werden
select NOW() > CURDATE(); 
# output : 1 

select date(NOW()) > CURDATE(); 
# output : 0 
Verwandte Themen