如果我错了,请修理我: 所以情况就是这样。让我们想象一下MySQL对网站的重要查询,有很多请求。并且MySQL表在写入期间可以LOCK,因此其他用户将不得不等待。 据我所知,WHERE子句中的MySQL函数是在EVERY ROW(?)上呈现的,所以它不会减慢查询速度。 虽然Php的time()就像一个静态数字,对于每个页面加载,它不会更新,也不需要在每次time()调用时重新计算(我相信它在Php内核的根C / C ++类中定义为静态变量(?)。 我也知道,如果我愿意的话:
WHERE table_field < '".(time()-86400)."'
它会在MySQL查询之前对Php页面加载进行减法计算,并且只计算一次结果, 但如果我愿意的话:
WHERE table_field < ".time()."-86400
然后它会对每一行进行计算。或者我错了,MySQL在相同的计算值上进行缓存?
情景:我有 5M行长度的MySQL InnoDB表名为预订,其中 INDEX 已添加到 booking_id , booking_status ,付费, booking_timestamp 字段。
问题:我正确地说,B比A快得多:
A - 慢,MySQL时间戳():
-- Delete Expired bookings
DELETE FROM bookings WHERE booking_paid='0' AND booking_timestamp < (UNIX_TIMESTAMP()-86400)
B - 快,PHP的时间():
-- Delete Expired bookings
DELETE FROM bookings WHERE booking_paid='0' AND booking_timestamp < '".(time() - 86400)."'
问题#2:字段减法的情况怎么样:
-- Delete Expired bookings
DELETE FROM bookings b
JOIN payment_methods pm ON b.payment_type=pm.method_code
WHERE b.booking_paid='0' AND b.booking_timestamp < (UNIX_TIMESTAMP()-pm.unpaid_booking_expiration_time)
VS
-- Delete Expired bookings
DELETE FROM bookings b
JOIN payment_methods pm ON b.payment_type=pm.method_code
WHERE b.booking_paid='0' AND b.booking_timestamp < (".time()."-pm.unpaid_booking_expiration_time)
请尽可能深入地回答这个确切的情况。