我正在尝试从两个表中选择数据。 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)) )
单独搜索其中任何一个条件的工作很快,但是当我将它们放在一起时,系统只是坐在那里而没有响应。我只是好奇我做错了什么。我应该用工会来做这件事吗?
答案 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))