Php的时间()VS WHERE子句中的MySQL的UNIT_TIMESTAMP() - 哪个更快?

时间:2015-08-11 16:08:47

标签: php mysql performance indexing unix-timestamp

如果我错了,请修理我: 所以情况就是这样。让我们想象一下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)

请尽可能深入地回答这个确切的情况。

0 个答案:

没有答案