我似乎正面临一个尴尬的情况,使用TIMESTAMPDIFF函数在mysql的查询条件。资源告诉我,这可能会降低执行效率,但我很好奇我应该如何继续。
下面是我的sqlSELECT personTotal.person_id
FROM personTotal
LEFT JOIN p2
ON p2.person_id = personTotal.person_id
WHERE TIMESTAMPDIFF(HOUR , personTotal.through_time, p2.through_time) < 20
您可以将WHERE
子句表达为使用INTERVAL
的加法:
SELECT p1.person_id
FROM personTotal p1
LEFT JOIN p2
ON p2.person_id = p1.person_id
WHERE
p1.through_time + INTERVAL 20 HOUR > p2.through_time;
上面查询的WHERE
子句,除了不使用日期函数外,还可以sargable,这意味着两个表的日期列上的任何索引都可以在这里使用。您上面使用TIMESTAMPDIFF
的版本是不可分割的,并且不能使用索引。