Answers:
永远不要使用像这样的选择器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'
答案的要旨,即在计算出的表达式上避免选择器,当然仍然有效。
WHERE col >= '2012-12-25' AND col < '2012-12-25' + INTERVAL 1 DAY
。它避免了0时间和工程DATE
,DATETIME
,DATETIME(6)
,等。随着闰日等交易
... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'
(如果您在date_column上有索引)可能比更好地工作DATE
。
BETWEEN
解决方案...有人委托吗?
BETWEEN
只是一种写法field >= value1 and fied<= value2
。