SQL ServerのManagement Studioでは早いがアプリケーションで実行すると遅くなる
Management Studioでのクエリ実行とPGの中での実行の違い
主に遅い原因は実行プランの違い、問題はなぜ違いが発生するかだが、原因としてManagement Studioでの実行とPGでの実行ではPGで頻繁に実行されるとSQLが再利用される。実行プランも再利用されるため、データによっては遅くなる場合がある。(らしい)
- ARITHABORTがManagement StudioではデフォルトONだが、PG実行時はデフォルトOFFになっている。
PGのSQL実行時に意図的にONにしてあげると、早くなる場合あり。(効果なしの場合も多い)
SET ARITHABORT ON -- 実行SQL SET ARITHABORT OFF
SQL文のエンコーディング問題
PGからSBサーバーへ送られるクエリのエンコーディングによっては以下の問題が発生しているみたい。varcharのほうが圧倒的多いはずだし、なんとかMSが頑張ってほしいな
- SQL ServerではvarcharがSJIS、nvarcharがUnicode扱い
- SQLがnvarcharとして実行されてた場合、varcharカラムに対して暗黙的にキャストが行われるらしい