我有两个MySQL表,列的数量和类型不同。但是有一个类型为DATETIME的列,在这两个列中都是相同的:expires。
我现在使用两个查询:
"DELETE FROM `table1` WHERE `expires` < UTC_TIMESTAMP()"
"DELETE FROM `table2` WHERE `expires` < UTC_TIMESTAMP()"Q1: --我从未对没有连接的多个表使用DELETE查询,因此无法找到创建单个查询的正确方法。如果不使用COMMIT,可能吗?
Q2: --我在DB中还没有很多记录,所以我无法测试使用来自PHP的2个查询和使用单个查询删除过期记录之间的性能差异。有人知道吗?
发布于 2012-04-25 02:58:16
例如,如果您关心的是时间问题,第一个查询将花费1分钟执行,但这将对您的系统造成问题(第二个表值将在1分钟+第二个查询执行时间后到期),您可以将它们与以下事务一起使用:
begin transaction
set @ts = utc_timestamp();
delete from table_1 where expires< @ts;
delete from table_2 where expires< @ts;
commit它们将同时更新。
发布于 2012-04-25 02:49:24
您可以使用一个查询从两个表中删除:
DELETE FROM table1 JOIN table2 ON (join_condition) WHERE table1.expires < UTC_TIMESTAMP() AND table2.expires < UTC_TIMESTAMP只有当连接在数据模型上是正确的时,这才有意义。
据我所知,没有理由让多个表语法更快。事实上,由于需要加入,它应该会慢一点(不要太慢,因为在从磁盘读取数据之后,数据就已经在内存中了,因此只丢失了一点处理)。
多表语法不符合标准SQL。这是一个特定于mysql的扩展。
https://stackoverflow.com/questions/10308653
复制相似问题