NIEMALS Verwenden Sie einen Selektor wie DATE(datecolumns) = '2012-12-24'
- es ist ein Leistungskiller:
- Es wird
DATE()
berechnet für alle Zeilen, einschließlich derer, die nicht übereinstimmen - es wird es unmöglich machen, einen Index für die Abfrage zu verwenden
Es ist viel schneller zu verwenden
SELECT * FROM tablename
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'
da dies die Verwendung des Index ohne Berechnung ermöglicht.
BEARBEITEN
Wie von Used_By_Already betont, sind in der Zeit seit der ersten Antwort im Jahr 2012 Versionen von MySQL aufgetaucht, bei denen die Verwendung von „23:59:59“ als Tagesende nicht mehr sicher ist. Eine aktualisierte Version sollte lauten
SELECT * FROM tablename
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'
Der Kern der Antwort, d. h. die Vermeidung eines Selektors bei einem berechneten Ausdruck, bleibt natürlich bestehen.