Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
搜索两个mysql表时,服务器变得无响应_Mysql - Fatal编程技术网

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

搜索两个mysql表时,服务器变得无响应,mysql,Mysql,我试图从两个表中选择数据。DBA以这样的方式配置表:第一个表假脱机记录5分钟,然后一个过程将数据移动到第二个表并清理假脱机。这种情况经常重复。问题是我需要从两个表中选择数据 以下是我目前的疑问: select * from table1,table2 where ( (table1.field>=DATE_SUB(UTC_TIMESTAMP(), INTERVAL 5 MINUTE)) OR (table2.field>=DATE_SUB(UTC_TIMESTAMP(), I

我试图从两个表中选择数据。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)) )
单独搜索这两种情况都很快,但是当我像上面一样将它们放在一起时,系统只是坐在那里,没有响应。我只是好奇我做错了什么。我应该用一个并集来代替吗?

您正在连接两个表,而没有任何连接where子句,因此您正在拉入一个笛卡尔积的M*N记录

换句话说,如果表1有100条与第一个条件匹配的记录,而表2有10000条记录,则检索的是1000000条记录,而不是10100条。最重要的是,您要检索的每个记录的大小都是2倍,因为它包括表1行中的所有字段+表2行中的所有字段,因此,使用我的示例s,您不仅将行数增加了100倍,还将检索到的数据大小增加了200倍

您想要的是使用并集而不是联接

在没有任何连接where子句的情况下连接两个表,因此您将M*N记录拉入笛卡尔积

换句话说,如果表1有100条与第一个条件匹配的记录,而表2有10000条记录,则检索的是1000000条记录,而不是10100条。最重要的是,您要检索的每个记录的大小都是2倍,因为它包括表1行中的所有字段+表2行中的所有字段,因此,使用我的示例s,您不仅将行数增加了100倍,还将检索到的数据大小增加了200倍

您想要的是使用并集而不是联接


知道了!谢谢你,我以为我在做傻事。具有讽刺意味的是,这是我第一次尝试的方式,但我希望通过移除工会和使用加入,可以使搜索更加优雅,大大提高了速度。现在大概需要5-10秒,明白了!谢谢你,我以为我在做傻事。具有讽刺意味的是,这是我第一次尝试的方式,但我希望通过移除工会和使用加入,可以使搜索更加优雅,大大提高了速度。它现在运行大约5-10秒。
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))