给定以下两个 mysql 查询:
SELECT * FROM table1 WHERE DATE_ADD(datetimecolumn,INTERVAL 24 HOUR)>NOW()
和
SELECT * FROM table1 WHERE DATE_SUB(NOW(),INTERVAL 24 HOUR)>datetimecolumn
哪个查询会更快?
第二个应该明显更快,因为datetimecolumn
可以直接用于索引操作。如果没有索引,我想说差异应该可以忽略不计(时间操作和函数调用比从磁盘检索数据要快得多)。
这两个查询不等价(它们不返回相同的记录)。
DATE_ADD(datetimecolumn,INTERVAL 24 HOUR)>NOW()
检索从现在起 24 小时内更新的记录(因此,从昨天开始插入的所有记录)。
第二
DATE_SUB(NOW(),INTERVAL 24 HOUR)>datetimecolumn
检索从现在起 24 小时后(过去两天或更长时间)的记录。
所以在那种情况下,哪个查询更快,答案是它取决于有多少记录......
下面会很快。
下面的可以应用 的索引datetimecolumn
,而上面的不能。
DATE_SUB(NOW(),INTERVAL 24 HOUR)
只需要计算一次,而DATE_ADD(datetimecolumn,INTERVAL 24 HOUR)
需要对每条记录做一次。