[MSSQL] WITH(NOLOCK)이란 ?

MSSQL WITH(NOLOCK)이란 ?

WITH(NOLOCK) : 해석하는 그대로 MSSQL에 잠금(LOCK)을 걸지 않는다는 것이다

MSSQL의 잠금은 데이터베이스의 자원을 자신이 사용하고 있으므로 다른 사용자의 엑세스를 제한하는 것을 의미 합니다.

 

잠금(LOCK)은 왜 필요한가?

데이터의 일관성을 유지하기 위해 필요합니다.

즉 동일한 데이터가 서로 다른 값을 갖지 않도록 하기 않도록 하는 것을 의미합니다.

일관성이 유지되지 않는다면 데이터베이스 자체에 심각한 오류의 요소가 되므로 잠금이 필요합니다.

 

즉 테이블에 UPDATE나 INSERT, DELECT 등 DML 구문을 사용하고 있을 때 테이블을 SELECT를 하면 구문이 끝날때 까지 대기를 합니다.

 

하지만 WITH(NOLOCK)을 사용하면 대기없이 바로 SELECT 결과가 도출됩니다.

 

기다리면 되는데 왜 WITH(NOLOCK)을 사용하는가?

실제 데이터베이스에서는 실시간으로 많은 데이터들이 업데이트됩니다.

데이터들이 업데이트될때 SELECT LOCK으로 인해 대기가 발생할 경우 조회속도가 현저히 줄어들거나 액세스 자체를 못하는 상황이 발생할 수 있으므로 WITH(NOLOCK)을 사용합니다.

 

WITH(NOCK) 사용방법

SELECT TOP(10) *

FROM employee WITH(NOLOCK)

 

SELECT E.NAME, B.ID

FROM employee AS E WITH(NOLOCK)

INNER JOIN USER AS B WITH(NOLOCK)

ON E.NAME_ID = B.NAME_ID