为什么UNION ALL似乎等待两个查询完成?

时间:2013-03-06 16:56:58

标签: mysql sql sleep union-all

运行此查询:

select null, "hello" union all select sleep(4), "world";
5.5.29上的

不会按预期立即返回第一行。相反,我必须等待4秒才能得到任何东西。 如何让MySQL立即返回第一行?

我正在尝试测试慢查询的处理。划分它是没有意义的,因为我会测试别的东西。

2 个答案:

答案 0 :(得分:4)

  

如何让MySQL立即返回第一行?

分别运行两个查询而不是使用UNION。我承认这个答案似乎有点陈词滥调,但它可能是你问题的唯一真实答案。

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

答案 1 :(得分:0)

您已使用UNION ALL构造要求设置单个记录。如果你想看到一个部分后跟另一个部分,请告诉SQL引擎;将第一部分作为一个查询运行以返回记录集,然后将另一半运行作为另一个查询以返回第二个记录集。这两者可以在客户端连接在一起。