最近、SQLで特定のクエリを実行して複数の異なる方法で実行できる最適な方法を探すために最善を尽くしています。私の研究の中では、WHERE INコンセプトに対する嫌悪感は、それがどのように機能するかという固有の非効率性のために、かなり嫌われてきました。SQL UPDATE WHERE IN(リスト)またはUPDATEはそれぞれ個別に更新されますか?
例えば:私の現在のプロジェクトでWHERE Col IN (val1, val2, val3)
、私はデータの大規模なセットでのUPDATEをやってると、より効率的である次のうちどれ疑問に思って:
(またはより良いオプションが存在するかどうか)UPDATE table1 SET somecolumn = 'someVal' WHERE ID IN (id1, id2, id3 ....);
上記のIDのリストは、最大1.5kのIDにすることができます。
VS
コード内のすべてのIDのをループし、それぞれに次のステートメントを実行している:
UPDATE table1 SET somecolumn = 'someVal' WHERE ID = 'theID';
自分自身に少ないがありますので、それは、前者はより良い/より高速に動作することをより論理的と思われます実行するクエリ。つまり、SQLの出し入れとクエリのキューイングの仕組みに100%精通しているわけではありません。
また、テーブルロックやその他の一般的なパフォーマンスに関しては、DB上でより親しみがあるとは確信しています。
一般的な情報私はMicrosoft SQL Server 2014を使用しています。プライマリ開発言語はC#です。
すべてのヘルプははるかに高く評価されます。
EDIT:
オプション3:上記で
UPDATE table1 SET somecolumn = 'someVal' WHERE ID IN (SELECT ID FROM @definedTable);
、@definedTableは内部データがC#で(ASストアドプロシージャへ伝わってくるSQL 'ユーザー定義テーブル型' であります)種類SqlDbType.Structured
IDがどのように入力されているかを尋ねています。 IDはコード内のList<string>
にあり、ストアドプロシージャに送信される前にコード内の他のものに使用されます。現在、IDは1つの列(ID)のみを持つ「ユーザー定義の表型」としてストアド・プロシージャに入っています。
私はテーブルにそれらを有するコードを有する大規模な文字列を連結し、ちょうどid1, id2, id3, id4
など
実行計画を見てみましたが、どちらが2つのクエリの方が速いのですか? – Japongskie
id1、id2、id3はどこから来ていますか?実際のケースでは、いくつかの条件でフィルタリングした結果、別のテーブルから取得されます。この場合、適切なパフォーマンスを得るために、そのテーブルに参加する方がよいでしょう。 –
どのようにこれらのIDをSQLに渡していますか?あなたのC#コードの値のリストを持っていますか、別のSQLクエリの結果としてそれらを取得しますか? – DavidG