sql >> Database >  >> RDS >> Mysql

MySQL SELECTEER WAAR datetime overeenkomt met dag (en niet noodzakelijk tijd)

NOOIT OOIT gebruik een selector zoals DATE(datecolumns) = '2012-12-24' - het is een prestatiemoordenaar:

  • het berekent DATE() voor alle rijen, inclusief die, die niet overeenkomen
  • het maakt het onmogelijk om een ​​index voor de zoekopdracht te gebruiken

Het is veel sneller te gebruiken

SELECT * FROM tablename 
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'

omdat dit indexgebruik zonder berekening mogelijk maakt.

BEWERKEN

Zoals opgemerkt door Used_By_Already, zijn er sinds het eerste antwoord in 2012 versies van MySQL verschenen, waarbij het gebruik van '23:59:59' als dageinde niet langer veilig is. Een bijgewerkte versie zou moeten lezen

SELECT * FROM tablename 
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'

De kern van het antwoord, d.w.z. het vermijden van een selector op een berekende uitdrukking, blijft natuurlijk staan.



  1. SQLite-queryresultaten opmaken als een door komma's gescheiden lijst

  2. HA voor MySQL en MariaDB - Master-Master-replicatie vergelijken met Galera-cluster

  3. De Zombie PerfMon-tellers die nooit sterven!

  4. Een uitgebreide handleiding over het gebruik van MySQL