Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL SELECT WHERE datetime pasuje do dnia (a niekoniecznie do godziny)

NIGDY, PRZENIGDY użyj selektora takiego jak DATE(datecolumns) = '2012-12-24' - to zabójca wydajności:

  • obliczy DATE() dla wszystkich wierszy, także tych, które nie pasują
  • uniemożliwi to użycie indeksu do zapytania

Jest znacznie szybszy w użyciu

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

ponieważ pozwoli to na użycie indeksu bez obliczeń.

EDYTUJ

Jak zauważył Used_By_Already, w czasie od pierwszej odpowiedzi w 2012 roku pojawiły się wersje MySQL, w których używanie „23:59:59” jako końca dnia nie jest już bezpieczne. Zaktualizowana wersja powinna brzmieć

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

Istota odpowiedzi, tj. unikanie selektora na wyrażeniu wyliczanym, oczywiście nadal obowiązuje.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć wszystkie tabele MySQL z wiersza poleceń bez uprawnień do bazy danych DROP?

  2. 4 sposoby na znalezienie zduplikowanych wierszy w MySQL

  3. Preferowany silnik MySQL – MyISAM lub InnoDB

  4. MySQL - UPDATE zapytanie oparte na SELECT Query

  5. Proste rozwiązywanie problemów z logowaniem PHP SQL