チューニング作業続き

遅いDB処理のチューニング作業続き。
遅い理由は、テーブルのID値のリストをForeachでぶん回して、1ID毎にSELECTと、INSERT OR UPDATEのSQLを投げていることにあるので、IDのリストをそのままIN句の条件にセットして全対象データを一括でSELECTするように修正、その後、取得した対象データをINSERTが必要なものとUPDATEで更新するものとに分割して、INSERTするものに関してはBulkCopyで処理するようにした。全部まとめてMERGEで処理するという方法も考えたが対象データの大半がINSERTになるのでBulkCopyの方が高速だと判断。

もう1箇所、ループで回している箇所が存在するのだが、こちらはINSERT時にID値をC#のコードで生成しており一括で処理するには要件変更が必要になりそうなのでとりあえず放置。

とりあえず実行してみると、いままで5分ぐらいかかっていた処理が1分程度に短縮できたので、まぁ良いだろう。 チューニングってコストとの兼ね合いの部分が大きいので、どこまでやるのかという判断がなかなか難しい。