首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接2个删除查询(如何&性能)

问连接2个删除查询(如何&性能)
EN

Stack Overflow用户
提问于 2012-04-25 02:40:32
回答 2查看 303关注 0票数 1

我有两个MySQL表,列的数量和类型不同。但是有一个类型为DATETIME的列,在这两个列中都是相同的:expires。

我现在使用两个查询:

代码语言:javascript
复制
"DELETE FROM `table1` WHERE `expires` < UTC_TIMESTAMP()"
"DELETE FROM `table2` WHERE `expires` < UTC_TIMESTAMP()"

Q1: --我从未对没有连接的多个表使用DELETE查询,因此无法找到创建单个查询的正确方法。如果不使用COMMIT,可能吗?

Q2: --我在DB中还没有很多记录,所以我无法测试使用来自PHP的2个查询和使用单个查询删除过期记录之间的性能差异。有人知道吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-25 02:58:16

例如,如果您关心的是时间问题,第一个查询将花费1分钟执行,但这将对您的系统造成问题(第二个表值将在1分钟+第二个查询执行时间后到期),您可以将它们与以下事务一起使用:

代码语言:javascript
复制
begin transaction
set @ts = utc_timestamp();
delete from table_1 where expires< @ts;
delete from table_2 where expires< @ts;
commit

它们将同时更新。

票数 0
EN

Stack Overflow用户

发布于 2012-04-25 02:49:24

您可以使用一个查询从两个表中删除:

代码语言:javascript
复制
DELETE FROM table1 JOIN table2 ON (join_condition) WHERE table1.expires < UTC_TIMESTAMP() AND table2.expires < UTC_TIMESTAMP

只有当连接在数据模型上是正确的时,这才有意义。

据我所知,没有理由让多个表语法更快。事实上,由于需要加入,它应该会慢一点(不要太慢,因为在从磁盘读取数据之后,数据就已经在内存中了,因此只丢失了一点处理)。

多表语法不符合标准SQL。这是一个特定于mysql的扩展。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10308653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档