しばらく探してみたところ、答えが見つからなかったためこの質問を投稿し、似たような質問/回答があった場合は謝罪することにしました。
同じように設定された2つのSQLサーバーで以下のクエリを実行すると、パフォーマンスに影響する異なる実行プランが発生するため、原因を特定する必要があります。
クエリ:
SELECT process_id
INTO #temp
FROM revrep_revenue_fact
WHERE process_id = 284
DROP TABLE #temp
サーバーAの実行計画
サーバーBの実行計画 サーバーB http://s2.postimg.org/z9fjrfv4n/server_B.png
サーバーBの実際の実行計画ではTOPの物理演算があり、その理由を理解しようとしていることがわかります。両方のクエリは、インデックスシークで同じインデックスを使用します。
サーバーAとサーバーBの詳細は次のとおりです
サーバーAとBは両方とも
Windows Server 2008 R2 Standard Service Pack 1
24GB RAM
64ビットオペレーティングシステム
(SELECT SERVERPROPERTY( 'ProductVersion'))を使用して取得したSQL Server 2012のバージョン
サーバーA SQLバージョン11.0.3000.0
サーバーB SQLバージョン11.0.5058.0
私たちが試したこと
サーバーBの実行プランにTOPがあるのはなぜですか?この単純なクエリの例では実際の問題はありませんが、大きなクエリではTOPのコストが上昇し、パフォーマンスに影響が出ます。これをデバッグする助けがあれば大歓迎ですし、私たちはあなたが助ける必要があるかもしれない追加の情報を得ることができます。
GO
行カウント行の後にaを置くことができますか。Top演算子のプロパティも投稿できますか?
TOP
オペレータは、非ゼロ示唆SET ROWCOUNT
以前にその接続上で実行されました。実行後、再度お試しくださいSET ROWCOUNT 0;
。また、投稿したSQLバージョンはSQL 2008 R2ではありません。SELECT SERVERPROPERTY('ProductVersion');
2つのサーバーで実行して、実際のSQL Serverのバージョンを取得します。