このクエリの実行:
select null, "hello" union all select sleep(4), "world";
5.5.29 では、期待どおりに最初の行がすぐに返されません。代わりに、何かを取得する前に 4 秒待たなければなりません。MySQL に最初の行をすぐに返させるにはどうすればよいですか?
遅いクエリの処理をテストしようとしています。分割しても意味がありません。別のテストを行うことになるからです。
MySQL に最初の行をすぐに返させるにはどうすればよいですか?
UNION を使用する代わりに、2 つのクエリを個別に実行します。この答えは陳腐に思えるかもしれませんが、それがあなたの質問に対する唯一の本当の答えかもしれません.
2 番目のクエリを実行する必要がある理由の 1 つは、UNION では、すべてのユニオン サブクエリですべての列が同じである必要があるためです。つまり、数が同じで、データ型が互換性があります。2 番目のクエリによって返されるものに基づいてデータ型をプロモートすることもできます (たとえば、INT を BIGINT に展開します)。そのため、結果セットの最初の行のデータ型を決定する前に、すべてのサブクエリから少なくとも 1 行を取得する必要があります。
UNION ALL コンストラクトを使用して単一のレコード セットを要求しました。ある部分に続いて別の部分を見たい場合は、SQL エンジンにそのように伝えます。最初の部分を 1 つのクエリとして実行してレコードセットを返し、後半を別のクエリとして実行して 2 番目のレコードセットを返します。この 2 つは、クライアント側で結合できます。