sql >> Databasteknik >  >> RDS >> Mysql

MySQL SELECT WHERE datetime matchar dag (och inte nödvändigtvis tid)

ALDRIG NÅGONSIN använd en väljare som DATE(datecolumns) = '2012-12-24' - det är en prestationsdödare:

  • den kommer att beräkna DATE() för alla rader, inklusive de, som inte matchar
  • det kommer att göra det omöjligt att använda ett index för frågan

Det är mycket snabbare att använda

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

eftersom detta tillåter indexanvändning utan beräkning.

REDIGERA

Som påpekat av Used_By_Already, under tiden sedan det första svaret 2012, har det dykt upp versioner av MySQL, där det inte längre är säkert att använda '23:59:59' som ett dagsslut. En uppdaterad version bör läsa

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

Kontentan av svaret, det vill säga undvikandet av en väljare på ett beräknat uttryck, består naturligtvis fortfarande.



  1. Hur man installerar PostgreSQL 12 på Fedora 33

  2. MySQL DROP DATABAS

  3. Hur LOG2() fungerar i MariaDB

  4. Funktion med SQL-fråga har ingen destination för resultatdata