运行此查询:
select null, "hello" union all select sleep(4), "world";
on 5.5.29 不会按预期立即返回第一行。相反,我必须等待 4 秒钟才能得到任何东西。如何让 MySQL 立即返回第一行?
我正在尝试测试慢查询的处理。划分它是没有意义的,因为我会测试其他东西。
如何让 MySQL 立即返回第一行?
分别运行两个查询,而不是使用 UNION。我承认这个答案可能看起来有点陈词滥调,但它可能是您问题的唯一真正答案。
它必须执行第二个查询的一个原因是 UNION 要求所有联合子查询中的所有列都相同。即数量相同,数据类型兼容。它甚至可以根据第二个查询返回的内容提升数据类型(例如,将 INT 扩展为 BIGINT)。因此,它必须从所有子查询中至少取回一行,然后才能确定结果集第一行的数据类型。
您已通过使用 UNION ALL 构造请求单个记录集。如果你想看到一个部分接着另一个,告诉 SQL 引擎;将第一部分作为一个查询运行以返回记录集,然后将后半部分作为另一个查询运行以返回第二个记录集。两者可以在客户端连接在一起。