sql >> Database teknologi >  >> RDS >> Mysql

MySQL SELECT WHERE datetime matcher dag (og ikke nødvendigvis tid)

ALDRIG NOGENSINDE brug en vælger som DATE(datecolumns) = '2012-12-24' - det er en præstationsdræber:

  • den vil beregne DATE() for alle rækker, inklusive dem, der ikke matcher
  • det vil gøre det umuligt at bruge et indeks til forespørgslen

Det er meget hurtigere at bruge

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

da dette vil tillade indeksbrug uden beregning.

REDIGER

Som påpeget af Used_By_Already, er der i tiden siden det første svar i 2012 dukket op versioner af MySQL, hvor det ikke længere er sikkert at bruge '23:59:59' som afslutning på dagen. En opdateret version bør læse

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

Essensen af ​​svaret, dvs. undgåelsen af ​​en vælger på et beregnet udtryk, står selvfølgelig stadig.



  1. Oracle fjerner ikke markører efter lukning af resultatsæt

  2. Vælg flere kolonner fra to tabeller ved hjælp af greendao

  3. MySQL-fejl 1153 - Fik en pakke større end 'max_allowed_packet' bytes

  4. Top 3 tips, du skal vide for at skrive hurtigere SQL-visninger