2011-08-15 6 views
2

사람은 일반 영어 MSSQL에서 CTE의 대 테이블 변수 대 임시 테이블을 사용 사이의 성능 차이를 침착하게 할 수 있습니다. 임시 테이블을 자주 사용했고 CTE를 사용하기 시작한 이유는 명확한 구문 때문 이었지만 느린 것으로 나타났습니다. 나는 임시 테이블이 시스템 메모리를 사용하고 있기 때문에 빠른 것 같지만 여러 작업을 수행하려고 할 때 병목 현상이 될 수 있습니다. 테이블 변수 나는 거의 사용하지 않았으며 많은 것을 알지 못합니다. 전문가의 조언을 구하고 있습니다.임시 테이블 저장 성능 비교

+0

설명 (그리고 그들은 정렬과 같은 특정 속성에 대한 서버 기본값을 상속). 하지만 내가 언급 한 주된 이유는 귀하의 태그가 mssql이 아니라 mysql이라고 말하는 것입니다. – tomfumb

+0

@tomfumb, tempdb 시스템 데이터베이스에 저장됩니다. –

답변

0

이 문제는 한 세트의 전달을 수행하기 위해 임시 테이블보다 더 적은 저장 프로 시저를 재 컴파일 될 수 있습니다 온라인 설명서, MSDN 및이 사이트에서 다루고 있습니다. 여기 What's the difference between a temp table and table variable in SQL Server?을 읽을 수있는 임시 테이블과 테이블 변수에 대한

. 많은 경우 임시 테이블은 프로 시저의 재 컴파일을 야기 할 수 있다는 것을 알게 될 것입니다.

CTE를 잘 메모리에 그렇게 필요하지, 내가 임시 테이블 (#table가) 시스템의 DB에 저장되어 믿고 여기 http://blogs.msdn.com/b/craigfr/archive/2007/10/18/ctes-common-table-expressions.aspx

0

CTE는 성능에 중립적입니다. SQL 문 (일반적으로 복잡한 JOIN 또는 필드에 적용된 내장 함수)을 추출하여 개발자를위한 쿼리를 단순화합니다. 데이터베이스 엔진은 CTE를 사용하는 쿼리에 CTE를 바로 삽입합니다. 따라서 CTE 자체가 "느린"것은 아니지만 데이터베이스 테이블이 임시 테이블을 사용하는 쿼리에 대해보다 나은 쿼리 계획을 작성하기 때문에 임시 테이블을 사용하면 성능이 향상되는 것을 알 수 있습니다.

0

이 질문은 herehere 대답했다. 간단히 말해서, 이것은 다른 작업을위한 다른 도구입니다.

  • 표 변수
  • 임시 테이블을 재사용 좋다 또는 복수의 수신 데이터