1. ホーム
  2. sql

[解決済み] SQL Server NOLOCKと結合

2022-04-22 17:34:41

質問

背景 パフォーマンスクリティカルなクエリを実行したいのですが、ダーティリードは気にしません。

質問:結合を使用する場合、その結合にもNOLOCKヒントを指定する必要がありますか?

例えば;です。

SELECT * FROM table1 a WITH (NOLOCK)
INNER JOIN table2 b WITH (NOLOCK) ON a.ID = b.ID

に相当する。

SELECT * FROM table1 a WITH (NOLOCK)
INNER JOIN table2 b ON a.ID = b.ID

それとも (NOLOCK) のヒントは、結合されたテーブルをロックしないようにするためですか?

解決方法は?

には触れません。 READ UNCOMMITTED という質問だけです。

はい、必要です。 WITH(NOLOCK) を結合の各テーブルに追加します。 いいえ、クエリーは同じではありません。

この練習をしてみてください。 トランザクションを開始し、table1 と table2 に行を挿入します。 トランザクションをまだコミットまたはロールバックしないでください。 この時点で、最初のクエリは正常に返され、コミットされていない行も含まれます。 WITH(NOLOCK) のヒントがあります。