sql >> Databáze >  >> RDS >> Mysql

MySQL SELECT WHERE datum a čas odpovídá dni (a nemusí nutně času)

NIKDY použijte selektor jako DATE(datecolumns) = '2012-12-24' - je to zabiják výkonu:

  • vypočítá DATE() pro všechny řádky, včetně těch, které se neshodují
  • znemožní použití indexu pro dotaz

Používání je mnohem rychlejší

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

protože to umožní použití indexu bez výpočtu.

UPRAVIT

Jak upozornil Used_By_Already, v době od první odpovědi v roce 2012 se objevily verze MySQL, kde už není bezpečné používat '23:59:59' jako konec dne. Aktualizovaná verze by měla číst

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

Podstata odpovědi, tedy vyhýbání se selektoru na vypočítaném výrazu, samozřejmě stále platí.



  1. SQL dotaz k vytvoření databáze v MySQL

  2. Android SQLite:Jak vygenerovat velkou tabulku pro účely testování?

  3. Nastavte počáteční hodnotu pro sloupec s automatickým přírůstkem

  4. PostgreSQL:Dotaz nemá žádný cíl pro výsledná data