搜索两个mysql表,服务器变得无法响应

时间:2012-08-30 16:10:36

标签: mysql

我正在尝试从两个表中选择数据。 DBA的表配置方式使第一个表记录5分钟的记录,然后一个过程将数据移动到第二个表并清理假脱机。这不断重复。问题是我需要从两个表中选择数据。

到目前为止,这是我的查询:

select * from table1,table2 
where ( (table1.field>=DATE_SUB(UTC_TIMESTAMP(), INTERVAL 5 MINUTE))  
OR 
(table2.field>=DATE_SUB(UTC_TIMESTAMP(), INTERVAL 5 MINUTE)) )

单独搜索其中任何一个条件的工作很快,但是当我将它们放在一起时,系统只是坐在那里而没有响应。我只是好奇我做错了什么。我应该用工会来做这件事吗?

1 个答案:

答案 0 :(得分:4)

您正在加入2个表而没有任何加入where子句,因此您将拉入M * N个记录(笛卡尔积)。

换句话说,如果table1有100条匹配第一个条件的记录,而table2有10,000条记录,那么您将检索1,000,000条记录而不是10,100条记录。最重要的是,您检索的每个记录都是大小的2倍,因为它包含table1行中的所有字段+ table2行中的所有字段,所以不仅要将行数增加100倍(使用我的例如#s),您还将检索到的数据大小增加了200倍。

您想要的是使用UNION而不是连接。

select * from table1
where table1.field>=DATE_SUB(UTC_TIMESTAMP(), INTERVAL 5 MINUTE))  
UNION
select * from table2
where table2.field>=DATE_SUB(UTC_TIMESTAMP(), INTERVAL 5 MINUTE))