1
私は様々なプロジェクト(データベース)からいくつかのレコードをテンポラリテーブルに動的に収集し、一時テーブルからテーブルに挿入するプロシージャを作成しました。 WHERE
ステートメントでは、残念ながら私は実行プランにチェックしたときに、このクエリの部分が大量にかかることがわかりました。このINSERT
部分またはWHERE
部分を最適化するにはどうすればよいですか?SQLテンポラリテーブルからテーブルへの挿入を最適化する方法
INSERT INTO dbo.PROJECTS_TESTS (PROJECTID, ANOTHERTID, DOMAINID, is_test)
SELECT * FROM #temp_Test AS tC
WHERE NOT EXISTS (SELECT TOP 1 1
FROM dbo.PROJECTS_TESTS AS ps WITH (NOLOCK)
WHERE ps.PROJECTID = tC.projectId
AND ps.ANOTHERTID = tC.anotherLink
AND ps.DOMAINID = tC.DOMAINID
AND ps.is_test = tC.test_project
)
よう
か何か、これは本番環境であれば、(NOLOCK)を使用しないでください。実行計画を表示してください。なぜこのクエリが不適格であると思われるのでしょうか。 PROJECTS_TESTSテーブルにインデックスがありますか? –
1. #temp projectId、anotherLink、DOMAINID、test_projectにインデックスを作成します。 2.不要@TOP 1 1 @ 3.削除NOLOCK –