私は非常に単純なクエリを持っていますが、それは私を完全に狂わせています。
状況は次のとおりです。
- 2 つのデータベース サーバーがあります。
- 1 つは古い SQL Server 2000 (VM) で、リソースは非常に最小限です。
- もう 1 つは非常に大規模な SQL Server 2005 エンタープライズ クラスタで、非常に膨大な量のリソースが利用可能です。
- 3 秒で実行され、SQL Server 2000 で 50,000 行以上のデータを返す大きなクエリのごく一部があります。
- この同じ小さなクエリは、SQL Server 2005 で 1000 行を返すのに 15 分以上かかります
- 私が使用しているデータベースは、これら 2 つのサーバーのミラー イメージです。同じテーブル、テーブル内の同じデータ、テーブルの同じインデックスなど。
SQL Server 2005 テーブルにさまざまなインデックスを作成し、存在するすべてのインデックスをデフラグし、テーブル統計を更新してみました。SQL Server 2005 でこのクエリを高速に実行することはできませんでした。現在、SQL に対して他に何も実行していません。 Server 2005 サーバー、および私たちの DBA は、構成の問題ではなく、SQL Server 2000 と SQL Server 2005 の間の機能の廃止とは関係がないことを保証します.
クエリは次のとおりです。
SELECT (CASE
WHEN TeamMember.ID IN (SELECT DISTINCT ProjMgrID FROM ProjMgr)
THEN 'Yes'
ELSE 'No'
END) AS OnProjAsMgr
FROM TeamMember
したがって、すべての ProjMgr の個別のリストを返し、TeamMember がそのリストにある場合は、OnProjAsMgr 値に「Yes」を割り当てます。
私はまったくの SQL 初心者で、これは前任者によって書かれたコードです。より良い書き方があるかどうかはわかりませんが、SQL Server 2000 ではうまく動作するのに、SQL Server 2005 では完全に内破してしまう理由がわかりません。