Order By 없는 쿼리란
데이터의 출력이 항상 일관되지 않다는 것을 의미합니다.
즉, [ 1, 2, 3 ] 순으로 출력되던 결과가 [ 3, 1, 2 ] 로 출력 될 수도 있습니다.
Order By 유무에 따른 쿼리
아래와 같은 쿼리가 있습니다.
이 쿼리는 데이터의 출력이 항상 일관되다는 것을 보장할 수 있을까요?
병렬로 출력하게 된다면 출력버퍼에는 매번 다른값이 출력되고 TOP 20 으로 나온 값은 매번 다르게 될 것입니다.
즉, 의도하지 않은 값이 임시테이블에 들어갈 수 있게 됩니다.
1 2 3 4 5 | INSERT @TEMP_TABLE SELECT TOP(20) C1 FROM dbo.T1 WITH(NOLOCK) WHERE C1 > @C1 AND C2 = @C2 | cs |
그럼 이 쿼리를 어떻게 변경해야 할까요?
ORDER BY 를 넣어 출력되는 결과가 항상 일관되기 때문에 의도치 않은 값이 들어오지 않게됩니다.
1 2 3 4 5 6 | INSERT @TEMP_TABLE SELECT TOP(20) C1 FROM dbo.T1 WITH(NOLOCK) WHERE C1 > @C1 AND C2 = @C2 ORDER BY C1 DESC | cs |
'Database > DBA 의 개인생각' 카테고리의 다른 글
[DBA] 로그인 계정을 삭제할 때 체크해야 할 리스트 (0) | 2020.07.06 |
---|---|
[DBA] 배치작업 만들 때 고려사항, 여러개를 같은시간에 수행할 때 위험성 (0) | 2020.04.03 |
[DBA] 삭제 조건에 적절한 인덱스가 없는 경우 단위처리 및 RowLock 으로 삭제하는 방법 (0) | 2019.12.26 |
[DBA] 데이터 변경시에는 PK 를 기준으로 진행 (0) | 2019.12.24 |
[DBA] foreign key(외래키) 단점과 위험성에 대해 (0) | 2019.12.15 |