私は、SQLサーバーインストールのパフォーマンス上の問題を助けるように求められました。私はSQL Serverのエキスパートではありませんが、見てみることにしました。私たちは、問題なく動作するように見えるクローズドソースアプリケーションを使用しています。しかし、2000年から2005年にかけてSQL Serverをアップグレードした後、アプリケーションのパフォーマンスが著しく低下したと報告されています。私はSQLプロファイラを実行し、実行するために約30秒かかる次のクエリ(無実を保護するためにフィールド名が変更された)をキャッチしました。私の最初の考えは、私はクエリを最適化する必要がありました。しかし、アプリケーションがクローズドソースであり、ベンダーが役に立たないことを考えると、これは不可能です。ですから、私はこのクエリを変更せずにすばやく実行させる方法を理解しようとしています。また、古いSQL Server 2000製品でこのクエリがどのように速く実行されたかについてもわかりません。おそらく、新しいSQLサーバー上で実行されなかったり、動作しなかったりするインスタンスに、ある種のパフォーマンスチューニングが適用されていた可能性があります。 DBCC PINTABLEが気になります。Microsoft SQL Server:ダムクエリのパフォーマンスを向上させる方法
とにかく、ここで問題のクエリは次のとおりです。
select min(row_id) from Table1 where calendar_id = 'Test1'
and exists
(select id from Table1 where calendar_id = 'Test1' and
DATEDIFF(day, '12/30/2010 09:21', start_datetime) = 0
)
and exists
(select id from Table1 where calendar_id = 'Test1' and
DATEDIFF(day, end_datetime, '01/17/2011 09:03') = 0
);
表1は、およそ6200のエントリを持っており、このようになります。私は効果のない様々な指標を作成しようとしました。
id calendar_id start_datetime end_datetime
int, primary key varchar(10) datetime datetime
1 Test1 2005-01-01... 2005-01-01...
2 Test1 2005-01-02... 2005-01-02...
3 Test1 2005-01-03... 2005-01-03...
...
誰かがこの謎を解決することができれば非常に感謝します。
ありがとうございます。
このコードはストアドプロシージャ内にありますか? SPパラメータは駆動されていますか? –