READUNCOMMITTED 와 NOLOCK
MSSQL에서 READUNCOMMITTED와 NOLOCK 옵션은 둘 다 트랜잭션 격리 수준에서 가장 낮은 수준을 나타냅니다.
트랜잭션이 커밋되지 않은 데이터를 읽을 수 있도록 허용합니다.
🟢 EADUNCOMMITTED
READUNCOMMITTED 는 트랜잭션 격리 수준 중 하나입니다.
쿼리가 실행되는 동안 다른 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있게 합니다.
이 격리 수준을 사용하면 쿼리 성능이 향상될 수 있지만, "더티 리드(Dirty Read)"가 발생할 수 있습니다.
즉, 아직 커밋되지 않은 트랜잭션이 롤백되는 경우, 잘못된 데이터를 읽게 되는 상황이 발생할 수 있습니다.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM TABLE;
이 예제에서는 테이블의 데이터를 읽을 때, 다른 트랜잭션이 커밋하지 않은 데이터도 읽을 수 있습니다.
🟢 NOLOCK
NOLOCK 는 특정 쿼리에서 테이블의 데이터를 잠금 없이 읽을 수 있게 합니다.
내부적으로 READUNCOMMITTED와 동일한 효과를 가집니다.
특정 쿼리에만 적용할 수 있습니다.
SELECT * FROM TABLE WITH (NOLOCK);
이 예제에서는 테이블의 데이터를 읽을 때, 다른 트랜잭션이 커밋하지 않은 데이터도 읽을 수 있습니다.
WITH (NOLOCK) 를 사용하면 특정 쿼리에서만 적용되므로, 트랜잭션 격리 수준을 변경하지 않고도 동일한 효과를 얻을 수 있습니다.
🟣 차이점
- 적용 범위
- READUNCOMMITTED: 트랜잭션 격리 수준을 변경하므로, 설정된 트랜잭션 내의 모든 쿼리에 적용됩니다.
- NOLOCK: 특정 쿼리에서만 적용됩니다.
- 사용 방법
- READUNCOMMITTED: 트랜잭션 격리 수준을 설정하는 명령을 사용합니다.
- NOLOCK: 쿼리 힌트를 사용하여 특정 쿼리에 적용합니다.
- 유연성
- READUNCOMMITTED: 트랜잭션 전체에 걸쳐 일관된 격리 수준을 유지하려는 경우에 적합합니다.
- NOLOCK: 개별 쿼리에만 영향을 미치므로, 특정 쿼리의 성능을 최적화하고자 할 때 유용합니다.
결론
READUNCOMMITTED 와 NOLOCK 는 기본적으로 동일한 작업을 수행하지만, 적용 범위와 사용 방법에서 차이가 있습니다.
성능을 향상시키기 위해 더티 리드를 허용할 필요가 있는 경우, 각각의 상황에 맞게 적절한 방법을 선택하여 사용하면 됩니다.
출처 | ChatGPT
'DataBase > MSSQL' 카테고리의 다른 글
MSSQL 에서 UDT 란 무엇인가 | ChatGPT (1) | 2024.10.11 |
---|---|
Index Scan 과 Index Seek 차이 | ChatGPT (0) | 2024.10.10 |
MSSQL 클러스터 인덱스와 넌클러스터 인덱스란 | ChatGPT (0) | 2023.11.29 |
INNER JOIN 을 사용하여 UPDATE 문 작성 방법 | ChatGPT (0) | 2023.11.21 |
MSSQL 오늘 날짜 기준 달의 첫날과 마지막 날 구하는 방법 | ChatGPT (0) | 2023.10.30 |