Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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_Sql_Sleep_Union All - Fatal编程技术网

Mysql 为什么工会似乎都在等待这两个查询完成?

Mysql 为什么工会似乎都在等待这两个查询完成?,mysql,sql,sleep,union-all,Mysql,Sql,Sleep,Union All,运行此查询: select null, "hello" union all select sleep(4), "world"; 在5.5.29中,未按预期立即返回第一行。相反,我必须等待4秒钟才能得到任何东西如何让MySQL立即返回第一行? 我试图测试对慢速查询的处理。划分它是没有意义的,因为我会测试其他东西 如何让MySQL立即返回第一行 分别运行两个查询,而不是使用联合。我承认这个答案似乎有些陈腐,但它可能是你问题的唯一真正答案 它必须执行第二个查询的一个原因是联合要求所有联合子查询中的所

运行此查询:

select null, "hello" union all select sleep(4), "world";
在5.5.29中,未按预期立即返回第一行。相反,我必须等待4秒钟才能得到任何东西如何让MySQL立即返回第一行?


我试图测试对慢速查询的处理。划分它是没有意义的,因为我会测试其他东西

如何让MySQL立即返回第一行

分别运行两个查询,而不是使用联合。我承认这个答案似乎有些陈腐,但它可能是你问题的唯一真正答案


它必须执行第二个查询的一个原因是联合要求所有联合子查询中的所有列都相同。也就是说,数量相同,数据类型兼容。它甚至可以根据第二个查询返回的内容升级数据类型(例如,将INT扩展为BIGINT)。因此,它必须从所有子查询中至少返回一行,然后才能确定结果集第一行的数据类型。

您已经使用UNION all构造请求了一个记录集。如果您想看到一部分后面跟着另一部分,请告诉SQL引擎:;将第一部分作为一个查询运行以返回记录集,然后将第二部分作为另一个查询运行以返回第二个记录集。这两者可以在客户端结合起来。

我正在尝试测试对慢速查询的处理。把它分开是没有意义的,因为我会测试其他东西。当一个问题呈现错误或不完整的事实时,它会要求错误或不完整的答案。将此添加到您的问题中,以便新来的读者立即看到整个问题。由于这只是一条语句(因此也是一个结果),您不能让它立即返回第一行。@a_horse_with_no_name:我怀疑结果集是否总是完全缓冲的。如果你有一个巨大的表格,并且你选择了,结果马上就会出来,所以这似乎证明了这一点。那么,为什么一排不能排在另一排之前呢?Bill Karwin给出了一个答案,但是SQL引擎没有理由看不到查询有多简单,也知道不需要转换任何类型。相关:@Janus Troelsen-例如,
UNION
可以有
ORDER BY
,因此在输出结果之前需要有所有行。@PM77-1:但它没有,在这种情况下。所以MySQL有优化的空间。