programing

보기를 사용한 쿼리에서 잠금 테이블 힌트와 함께 사용 - 보기 내에서 전파됩니까?

powerit 2023. 7. 17. 21:30
반응형

보기를 사용한 쿼리에서 잠금 테이블 힌트와 함께 사용 - 보기 내에서 전파됩니까?

SQL Server의 View에 "WITH NOLOCK" 쿼리 힌트가 사용되는 경우, View 정의의 원시 테이블에 NOLOCK이 사용되지 않더라도 해당 힌트를 View 정의 자체에 전파합니까?이를 필요로 하는 이유는 지원 담당자가 시간이 많이 소요되는 대규모 쿼리를 수행하기를 원하지만 애플리케이션 자체 내의 보기를 사용하는 모든 쿼리에 이 잠금을 적용하지는 않기 때문입니다.

예, NOLOCK은 보기 정의에서 사용하는 테이블로 전파됩니다(최소한 SQL Server 2005에서는).

MSDN의 표 힌트 참조:

SQL Server 2005에서는 모든 잠금 힌트가 뷰에서 참조되는 모든 테이블 및 뷰로 전파됩니다.또한 SQL 서버는 해당하는 잠금 일관성 검사를 수행합니다.

하지만,

테이블에 계산된 열이 포함되어 있고 계산된 열이 다른 테이블의 열에 액세스하는 식 또는 함수에 의해 계산되는 경우 테이블 힌트는 해당 테이블에서 사용되지 않습니다.즉, 테이블 힌트가 전파되지 않습니다.예를 들어, NOLOCK 테이블 힌트가 쿼리의 테이블에 지정됩니다.이 테이블에는 다른 테이블의 열에 액세스하는 식과 함수의 조합으로 계산되는 열이 있습니다.식 및 함수에서 참조하는 테이블은 액세스할 때 NOLOCK 테이블 힌트를 사용하지 않습니다.

인덱싱된 뷰를 사용하는 경우 특별한 경우도 있으므로 좀 더 읽어보고 싶을 수 있습니다.

자세한 내용은 해상도 보기를 참조하십시오.

로리의 훌륭한 대답을 보충하기 위해서야

그는 "네, NOLOCK은 적어도 SQL Server 2005에서 보기 정의에 의해 사용되는 테이블로 전파됩니다."라고 썼습니다.

실제로 이 기능은 SQL 2000에서도 작동합니다.BOL에서:

select_statement는 SELECT 문을 사용하므로 FROM 절에 지정된 대로 및 힌트를 사용할 수 있습니다.자세한 내용은 FROM 및 SELECT참조하십시오.

언급URL : https://stackoverflow.com/questions/311429/using-with-nolock-table-hint-in-query-using-view-does-it-propagate-within-the

반응형