IDの大きなリストを取得するクエリを記述する必要があります。
多くのバックエンド(MySQL、Firebird、SQLServer、Oracle、PostgreSQLなど)をサポートしているため、標準SQLを作成する必要があります。
IDセットのサイズは大きくなる可能性があり、クエリはプログラムで生成されます。それで、最善のアプローチは何ですか?
1)INを使用してクエリを作成する
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
ここで私の質問です。nが非常に大きい場合はどうなりますか?また、パフォーマンスについてはどうですか?
2)ORを使用してクエリを記述する
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
このアプローチにはn制限はないと思いますが、nが非常に大きい場合のパフォーマンスはどうでしょうか?
3)プログラムによるソリューションの作成:
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
データベースサーバーがネットワーク経由でクエリされたときに、このアプローチでいくつかの問題が発生しました。通常、小さなクエリをたくさん作成するよりも、すべての結果を取得する1つのクエリを実行する方が適切です。たぶん私は間違っています。
この問題の正しい解決策は何でしょうか?
IN
!私はあなたの解決策1 + 3として採掘しました。最後のクエリは、実行するためにSQLに送信された1つの長いクエリ文字列でした。