SQL은 절차 적 언어가 아닌 선언적 언어입니다. 즉, 원하는 결과를 설명하기 위해 SQL 문을 구성합니다. 작업 수행 방법 을 SQL 엔진에 알리지 않습니다 .
일반적으로 SQL 엔진과 SQL 최적화 프로그램이 최상의 쿼리 계획을 찾도록하는 것이 좋습니다. SQL 엔진을 개발하기 위해 많은 노력을 기울이고 있으므로 엔지니어가 어떻게해야하는지 알고 있습니다.
물론 쿼리 계획이 최적이 아닌 상황이 있습니다. 그런 다음 쿼리 힌트를 사용하고, 쿼리를 재구성하고, 통계를 업데이트하고, 임시 테이블을 사용하고, 인덱스를 추가하여 성능을 향상 시키려고합니다.
당신의 질문에 관해서는. CTE와 하위 쿼리의 성능은 이론적으로 쿼리 옵티 마이저에 동일한 정보를 제공하므로 이론적으로 동일해야합니다. 한 가지 차이점은 한 번 이상 사용 된 CTE를 한 번 쉽게 식별하고 계산할 수 있다는 것입니다. 그런 다음 결과를 저장하고 여러 번 읽을 수 있습니다. 불행히도 SQL Server는이 기본 최적화 방법을 사용하지 않는 것 같습니다 (이 공통 하위 쿼리 제거를 호출 할 수 있음).
쿼리 실행 방법에 대한 추가 지침을 제공하므로 임시 테이블은 다른 문제입니다. 한 가지 큰 차이점은 옵티마이 저가 임시 테이블의 통계를 사용하여 쿼리 계획을 설정할 수 있다는 것입니다. 이로 인해 성능이 향상 될 수 있습니다. 또한 두 번 이상 사용되는 복잡한 CTE (하위 쿼리)가있는 경우 임시 테이블에 저장하면 성능이 향상 될 수 있습니다. 쿼리는 한 번만 실행됩니다.
귀하의 질문에 대한 답변은 특히 정기적으로 실행되는 복잡한 쿼리에 대해 기대하는 성능을 얻기 위해 놀아야한다는 것입니다. 이상적인 세계에서 쿼리 최적화 프로그램은 완벽한 실행 경로를 찾습니다. 자주 사용하지만 성능을 향상시킬 수있는 방법을 찾을 수 있습니다.