Sql サーバー 2005 から 2008 r2 に最近 Sql サーバーをアップグレードした後、奇妙な動作が見られます。アップグレード前は、以下のクエリは 1 秒未満で実行されていましたが、アップグレード後は 10 秒かかります。両方のテーブルに数百万の行があります。
モデル テーブル の null 許容列 colB にインデックスがあります。Join 句で使用されているスカラー関数 isnull があるため、以下のクエリは明らかにインデックス スキャンを実行しています。
select distinct a.colA
from ptransaction a
inner join model b on ISNULL(b.colB,0) = a.colB
where a.transid = 234
アップグレード前の計画情報はありませんが、このクエリは 1 秒以上実行されませんでした..Sql サーバー 2008 でオプティマイザの動作が変更され、実行速度が低下したかどうかはわかりません。
私は別の解決策を知っていますが、急いでスキーマを変更したくありません.モデルの colB を notnull として変換して、これを修正できることを知っています。他の解決策は、この問題を解決するインデックス付きの計算列を作成することです。私たちの環境でのスキーマの変更は簡単ではないので、Sql の第一人者がスキーマの変更を必要としないアイデアやその他の解決策を持っているかどうかを調べたいと思います。オプティマイザーまたは全体的な SQL サーバーのアップグレードがこのクエリを悪化させる可能性があることをまだ理解できません。どんな助けでも感謝します。
ニュージャージー州