9

저장 프로 시저에서 테이블 변수를 사용하면 성능 문제가 발생합니다.테이블 변수 SQL Server의 삽입시 성능 저하 저장 프로 시저

DECLARE @tblTemp TABLE(iId_company INT) 

INSERT INTO @tblTemp(iId_company) 
    SELECT id FROM ..... 

선택은 (138 개) 결과를 반환하지만 TABLE 변수에 삽입하는 1min15 필요하지만이 같은 SELECT에 임시 테이블을 사용하는 경우, woops, 0 초 소요 : 여기

실제로 일어나는 것이다

CREATE TABLE #temp (iId_company INT) 

INSERT INTO #temp(iId_company) 
    SELECT id FROM ... 

어떻게 동작합니까?

답변

10

임시 테이블을 사용하십시오. 훨씬 더 나은 성능을 볼 수 있습니다.

이 뒤에 추론에 대한 자세한 설명은 초기 질문의 범위를 벗어 그러나 요약 :

은 1 개 행을 가정, 즉 테이블 변수는 SQL Server가, 한 행에 대해 최적화되어
  • 반환됩니다.
  • 테이블 변수는 통계를 작성하지 않습니다.

Google 임시 테이블과 풍부한 리소스와 토론을위한 테이블 변수. 그런 다음 특정 지원이 필요한 경우 Twitter에서 이메일을 보내거나 저에게 연락하십시오.

0

일반적으로 더 작은 데이터 집합의 경우 테이블 변수는 임시 테이블보다 빠릅니다. 큰 데이터 집합의 경우 테이블 변수가 병렬 처리를 지원하지 않기 때문에 성능이 떨어집니다 (this post 참조).

그 말로는 테이블 변수와 임시 테이블에서 느린 데이터 집합을 경험하지 못했습니다.

0

선택의 여지가 있지만 중요한 것은 무엇입니까? SQL Server 2005에서 내 쿼리가 수행하는 작업에 대해 내 선택이 상대적으로 빠르다는 문제로 인해 5 분 동안 모든 데이터가 약 150,000 개의 행으로 반환됩니다. 그러나 temp 테이블이나 테이블 변수에 같은 select를 삽입하려고하면 명령문이 죽기 전에 1 시간 이상 실행되었습니다. 나는 정말로 무슨 일이 일어나고 있는지 아직 알지 못했다. 쿼리 힌트 강제 순서를 추가하고 빠른 삽입을 시작했습니다.

0

임시 테이블에 대한 요점은 테이블 변수를 사용할 수없는 반면에 인덱스 등을 넣을 수 있다는 것입니다.