최근에 SELECT 쿼리에서 데이터를 정렬하는 패턴 (확실하지 않은 패턴이 될 수 있음)이 나타났습니다. 이 패턴은 데이터를 순서화하는 데있어 길고 비 선언적인 방법입니다. 패턴은 실제 테이블의 관련 데이터를 임시 테이블에 덤프 한 다음 임시 테이블의 필드에 orderby를 적용하는 것입니다. 내 생각에, 누군가가 그렇게하는 유일한 이유는 퍼포먼스 (나는 의심 스럽다)를 개선하는 것 뿐이며 다른 이점은 없다.SQL Server에서 데이터 정렬을 위해 임시 테이블 사용
예 : 사용자 테이블이 있다고 가정 해 봅시다. 표에는 수백만 개의 행이 포함될 수 있습니다. 우리는 첫 번째 이름이 'G'로 시작하고 이름순으로 정렬 된 모든 사용자를 검색하려고합니다. 이 시나리오에 대한 SQL 쿼리를 구현하는 자연과 더 선언적 방법은 다음과 같습니다
더 자연스럽고 선언 방법
SELECT * FROM Users
WHERE NAME LIKE 'G%'
ORDER BY Name
자세한 정보 표시 방법
SELECT * INTO TempTable
FROM Users
WHERE NAME LIKE 'G%'
SELECT * FROM TempTable
ORDER BY Name
그 맥락으로, 나는 몇 가지 질문이 있습니다.
첫 번째 이름 필드에 인덱스이없는 경우 두 가지 방법간에 성능 차이가 발생합니다. 그렇다면 어떤 것이 더 좋을까요.
색인이 첫 번째 필드에 있으면 두 가지 방법간에 성능 차이가 있습니까? 그렇다면 어떤 것이 더 좋을까요.
SQL Server 최적화 프로그램이 두 가지 방법 모두에 대해 동일한 실행 계획을 생성해야합니까?
잠금/차단과 같은 다른 persective에서 장황한 방법으로 글을 쓸 때 어떤 이점이 있습니까?
미리 감사드립니다.
부모 테이블에서 색인이 생성되지 않은 열을 정렬하려는 경우에만 표시됩니다. – Dimitri
패턴을 본 문맥에서 두 가지 방법으로 테스트 했습니까? 다른 선택 항목에 사용되는 임시 테이블입니까? – Paparazzi
@Blam : 나는 당신의 질문을 가지고 있지 않았다. 성능 비교를 수행하지 않았습니다. 방금 위의 SQL 문 (장황한 방법)을 보았고 질문이 나에게 다가왔다. 나는 성능 개선에 도움이 될 수 있다는 자신을 확신시킬 수 없었다. –