2つの異なるクエリの結果を結果セットに追加する方法はありますか?
そんな感じ:
ResultSet rs ;
i=0;
while(i<=l)
ResultSet rs1 = select * from tablei;
rs = rs + rs1;
i++;
}
ユニオンでできることは知っていますが、クエリがたくさんあり、UNIONを使用するとクエリが遅すぎます。
何か案が?
UNION または UNION ALL を実行していますか? 後者は、自分で行うのと大差ないはずです (ただし、自分で行うと遅くなると思います)。
そのUnionの完了に時間がかかりすぎる場合は、使用するテーブルのインデックスを変更することを検討する必要があります。
インデックスの断片化を確認しましたか?
その方法でクエリを高速化できる場合は、適切なインデックスを追加するかどうかを確認してください。そのように使われている間は、すべての組合よりも早くなるとは思いません。
ResultSetを別のものに追加する方法はないと思います。そのようなことをしたり、コードからResultSetを更新したりするメソッドはクラスにありません。ResultSetは、開発者の操作やユーザー入力などからではなく、データベースからデータを受信するように設計されています。
私の提案は、データを配列などに抽出し、コード内のデータを操作するか、クエリでUNIONを実行することです。
使用するデータ アクセス ライブラリに応じて、ResultSet には MoveNextRecordSet() というメソッドがあり、SqlDataReader は NextResult() を提供します。
複数の結果セット (つまり、1 つの sp で複数の SELECT ステートメント) を返すストアド プロシージャを作成し、これらのメソッドを使用して結果セットをナビゲートします。
データベースで UNION よりも優れたパフォーマンスを持つメソッドを見つけたら、私は驚かれることでしょう。ユニオンはあなたが望むことを行っており、データベース サーバーはこれを可能な限り最適化します。あなたは本質的に車輪を再発明することになります.
UNION が遅すぎる場合は、データベースがインデックス作成を改善できるかどうかを調べてみてください。また、UNION オプションと比較して、個々のクエリでタイミング分析を行う必要があります。UNIONではなく、どちらかのクエリが遅いビットであると思います。