SQL Server NOLOCK 및 조인
배경 : 실행하려는 성능에 중요한 쿼리가 있으며 더티 읽기에 대해서는 신경 쓰지 않습니다.
내 질문은; 조인을 사용하는 경우 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에 행을 삽입하십시오. 아직 트랜잭션을 커밋하거나 롤백하지 마십시오. 이 시점에서 첫 번째 쿼리가 성공적으로 반환되고 커밋되지 않은 행이 포함됩니다. table2에 WITH(NOLOCK)
힌트 가 없으므로 두 번째 쿼리가 반환되지 않습니다 .
쿼리에서 NOLOCK
각각 을 지정해야한다고 확신했습니다 JOIN
. 그러나 내 경험은 SQL Server 2005로 제한되었습니다.
확인하기 위해 MSDN을 조회했을 때 명확한 것을 찾을 수 없었습니다. 아래 진술은 2008 년의 경우 위의 두 진술이 2005 년이지만 동일하지만 그렇지 않다고 생각합니다.
[SQL Server 2008 R2]
모든 잠금 힌트는 뷰에서 참조되는 테이블 및 뷰를 포함 하여 쿼리 계획에 의해 액세스되는 모든 테이블 및 뷰에 전파됩니다 . 또한 SQL Server는 해당 잠금 일관성 검사를 수행합니다.
[SQL Server 2005]
SQL Server 2005에서는 모든 잠금 힌트가 뷰에서 참조되는 모든 테이블과 뷰에 전파됩니다. 또한 SQL Server는 해당 잠금 일관성 검사를 수행합니다.
또한 참고 사항-이는 2005 년과 2008 년 모두에 적용됩니다.
쿼리 계획에서 테이블에 액세스하지 않으면 테이블 힌트가 무시됩니다. 옵티마이 저가 테이블에 전혀 액세스하지 않기로 선택했거나 인덱싱 된 뷰가 대신 액세스 되었기 때문일 수 있습니다. 후자의 경우
OPTION (EXPAND VIEWS)
쿼리 힌트 를 사용하여 인덱싱 된 뷰에 액세스하지 못하게 할 수 있습니다 .
둘 다. READ UNCOMMITTED
개별 잠금 힌트를 제공하는 것보다 항상 격리 수준을 낫게 설정합니다 . 또는 일관성 과 같은 세부 사항에 관심이있는 경우 스냅 샷 격리를 사용하는 것이 좋습니다 .
참고 URL : https://stackoverflow.com/questions/3783525/sql-server-nolock-and-joins
'Programming' 카테고리의 다른 글
브라우저에 마우스가없고 터치 전용임을 감지 (0) | 2020.06.21 |
---|---|
Swift에서 가변 개수의 인수를 가진 함수에 배열 전달 (0) | 2020.06.21 |
ASP.NET 임시 파일 정리 (0) | 2020.06.21 |
Java가 Throwable의 일반 서브 클래스를 허용하지 않는 이유는 무엇입니까? (0) | 2020.06.21 |
부드러운 GPS 데이터 (0) | 2020.06.21 |