Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL SELECT WHERE дата и час съвпада с ден (и не непременно час)

НИКОГА използвайте селектор като DATE(datecolumns) = '2012-12-24' - това е убиец на производителността:

  • ще изчисли DATE() за всички редове, включително тези, които не съвпадат
  • това ще направи невъзможно използването на индекс за заявката

Много по-бързо се използва

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

тъй като това ще позволи използване на индекс без изчисление.

РЕДАКТИРАНЕ

Както бе посочено от Used_By_Already, във времето от първоначалния отговор през 2012 г. се появиха версии на MySQL, където използването на „23:59:59“ като край на деня вече не е безопасно. Актуализирана версия трябва да чете

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

Същността на отговора, т.е. избягването на селектор върху изчислен израз, разбира се, все още стои.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Задайте часова зона в PHP и MySQL

  2. Какво означава, когато MySQL е в състояние Изпращане на данни?

  3. ПРИ ДУБЛИРАНЕ НА КЛЮЧ + АВТОМАТИЧНО НАРАЩАНЕ проблем mysql

  4. Използване на нишки за отправяне на заявки за база данни

  5. Рекурсивни категории с една заявка?