답변:
WITH (NOLOCK)는 테이블 수준에 대한 힌트입니다. 트랜잭션 격리 수준을 READ_UNCOMMITTED로 설정하면 연결에 영향을줍니다. 차이점은 범위에 있습니다. 다음 SQL Server 설명서에서 READUNCOMMITTED 및 NOLOCK을 참조하십시오.
http://technet.microsoft.com/en-us/library/ms187373.aspx
트랜잭션 격리 수준 : http://technet.microsoft.com/en-us/library/ms173763.aspx
지침에 관해서는 ... StackOverflow 및 전기 인터 웹에서 무작위 검색 ...
내가 아는 유일한 차이점은 스트로 미가 말한 것처럼 효과의 범위입니다. 테이블에 대한 NOLOCK 힌트 및 세션에 대한 READ UNCOMMITTED.
발생할 수있는 문제는 일관성에 관한 것입니다. 관심이 있다면 잘못된 정보에 대해 조작되는 다른 데이터에 영향을 미칠 수있는 더티 읽기 (dirty reads)를 얻을 수 있다는 것을 알고 있어야합니다.
나는 개인적으로 이것으로부터 어떤 문제도 보지 못했다고 생각하지만 그것은 내가 nolock을 사용하는 방법 때문일 수 있습니다. 사용할 수있는 시나리오가 있음을 알고 있어야합니다. 주로 테이블에 새 데이터를 추가하지만 데이터 시나리오를 확인하기 위해 뒤에 오는 또 다른 프로세스가있는 시나리오입니다. 주요 흐름에는 읽기 중에 행으로 돌아가서 업데이트하는 것이 포함되지 않으므로 괜찮을 것입니다.
또한 요즘에는 다중 버전 동시성 제어를 살펴 봐야한다고 생각합니다. 나는 그들이 2005 년에 그것을 추가했다고 믿는다. 그것은 독자들에게 사용할 데이터베이스의 스냅 샷을 제공함으로써 작성자가 독자를 차단하는 것을 막는 데 도움이된다고 생각한다. 링크를 포함하고 독자에게 추가 연구를 남길 것입니다.
각 테이블에 WITH (NOLOCK)를 사용해야하므로 모든 FROM 또는 JOIN 절에 작성하는 것이 성 가실 수 있습니다. 그러나 그것은 "더티"읽기라고 불리는 이유가 있습니다. 따라서 세션 범위에 대한 기본값으로 설정하지 말고 언제 수행하는지 알아야합니다. 왜?
WITH (NOLOCK)를 잊어 버리는 것은 프로그램에 매우 극적인 영향을주지 않을 수 있지만 그렇지 않은 경우 더티 읽기를 수행합니다. 원하지 특정 상황에서 차이를 만들 수 있습니다.
따라서 나중에 롤백 될 수 있으므로 선택한 현재 데이터가 올바르지 않은 경우 WITH (NOLOCK)를 사용하십시오. 이는 주로 성능을 높이고 싶을 때 사용되며 애플리케이션 컨텍스트의 요구 사항으로 인해 일관성없는 데이터가 표시 될 위험을 감수 할 수 있습니다. 그러나 귀하 또는 담당자는 WITH (NOLOCK) 사용 결정의 장단점을 고려해야합니다.
REPEATABLE READ
이SERIALIZABLE
없는지 대신 고려하십시오 .SERIALIZABLE
매우 제한적이며 거의 사용해서는 안됩니다 (예를 들어 일부 중요한 금융 애플리케이션에서 제외).