임시 테이블을 작성하기 위해 tempdb
을 사용하는 프로 시저가 저장되어 있다고 가정하면 더 나은 성능을 얻기 위해 테이블 변수로 전환하는 것이 더 좋을까요?테이블 변수를 임시 테이블보다 빠르게 사용하고 있습니까
답변
임시 테이블이 성능면에서 우수합니다. 테이블 변수를 사용하고 변수의 데이터가 너무 커지면 SQL Server는 변수를 자동으로 임시 테이블로 변환합니다.
거의 모든 데이터베이스 관련 질문과 마찬가지로 수행하려는 작업에 따라 다릅니다. 따라서 더 많은 정보 없이는 대답하기가 어렵습니다.
내 대답은 시도하고 실행 계획을 살펴보십시오. 최저 비용으로 가장 빠른 방법을 사용하십시오.
상단에있는 내 의견이 의미가 있으며 전환해야합니까? –
말하기 어렵거나 전환하기가 어렵습니다. 테이블 변수를 반환하고 작업이 두 가지 방법 모두에서 빠르다면 예, 전환 할 것입니다. 당신은 정말로 그것을 시도해야합니다. 예를 들어, 지난 주 나는 매우 느린 쿼리를 최적화했습니다. 20 시간 전에, 지금 2 분. 테이블 변수에서 임시 테이블로 변경되었습니다. 반환 된 데이터는 크지 않고 2000 행 이었지만 많은 연산과 필터가있었습니다. – dknaack
"테이블 변수를 사용하고 변수의 데이터가 너무 커지면 SQL Server는 변수를 자동으로 임시 테이블로 변환합니다." 이 진술은 전적으로 거짓입니다. –
오브젝트는 메모리에 있기 때문에 적은 "설정 시간"이 같은 @Table이 빠를 수 있습니다.
@ 테이블에는 많은 어획량이 있습니다.
@Table에 기본 키를 설정할 수 있지만 그에 대한 기본 키를 가질 수 있습니다. 다른 색인 열 조합을 위해 클러스터되지 않은 클러스터되지 않음.
또한 테이블에 실제 데이터 볼륨 (약 200 개 이상, 아마도 1000 개 행)이 포함되는 경우 테이블 액세스가 느려집니다. 특히 유용한 인덱스가 없을 때 특히 그렇습니다.
# 테이블은 디버깅 할 때 떨어 뜨릴 필요가 있으므로 procs에 고통이 있습니다. 작성하는 데 오랜 시간이 걸립니다. 인덱스를 두 번째 단계로 추가해야하므로 설치 시간이 오래 걸립니다. 그러나 많은 양의 데이터가 있으면 매번 #tables가 있습니다.
테이블에 100 행 미만의 데이터가있는 경우에도 테이블에 유용한 인덱스를 만들 수 있으므로 여전히 # 테이블을 사용할 수 있습니다.
요약하면 간단한 proc 등을 할 때 대부분 @ 시간을 사용합니다.하지만 수행해야 할 것은 # 테이블이어야합니다.
필자는 최근에이 쿼리를 사용하여 (같은 매개 변수를 사용하여 여러 번 테스트 한) 동일한 쿼리 (5 초 후에 반환 된)와 # TempTable'은'@ TableVar'를 사용하여 16 초입니다. – Jason
@ 테이블에는 통계가 없으므로 실행 계획에 더 많은 추측이 필요합니다. 따라서 1000-ish 행의 권장 상한선. # 테이블에는 통계가 있지만 호출 간에는 can be cached입니다. 카디널리티가 SP가 실행될 때마다 크게 다른 경우 매번 REBUILD
및 RECOMPILE
이 필요합니다. 이것은 물론 오버 헤드이지만, 쓰레기 계획의 비용과 균형을 맞추어야합니다.
두 유형 모두 IO to TempDB입니다.
아니, @ 테이블은 만병 통치약이 아닙니다.
- 1. 임시 테이블 대 테이블 변수
- 2. SQL Server 임시 테이블과 테이블 변수
- 3. File.read에서 변수를 사용하고 있습니까?
- 4. 2D 이미지 뷰를 충분히 빠르게 사용하고 있습니까?
- 5. R에서 변수를 빠르게 검색 할 수 있습니까?
- 6. 공용 테이블 표현식과 임시 테이블
- 7. 여러 개의 임시 테이블?
- 8. 포스트그레스와 임시 테이블
- 9. SSIS + 임시 테이블
- 10. 파생 테이블 또는 임시 테이블
- 11. 런타임시 임시 테이블
- 12. 임시 테이블 대 커서
- 13. 임시 테이블에 대해 테이블 변수를 어느 시점에서 포기해야합니까?
- 14. 글로벌 임시 테이블 동시성
- 15. RMySQL을 사용하는 임시 테이블
- 16. SQL 서버의 임시 테이블
- 17. Innodb & 임시 테이블
- 18. 조인 대신 임시 테이블
- 19. SSIS 패키지의 임시 테이블 사용
- 20. 최종 임시 테이블에 통합 임시 테이블
- 21. 임시 중급 테이블
- 22. 에 임시 테이블
- 23. MySQL 임시 테이블 문제
- 24. SQL의 임시 테이블
- 25. Sybase 임시 테이블 삭제
- 26. 임시 테이블 범위?
- 27. HSQLDB 임시 캐시 테이블
- 28. T-SQL 임시 테이블
- 29. 보기에서 임시 테이블 사용
- 30. 임시 테이블에서 테이블 업데이트
임시 테이블에 몇 개의 레코드가 있는지, 테이블 변수와 같은 서버 구성은 tempdb에 푸시 될 수 있습니다. http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/30/sql-server-table-variable-vs-local-temporary-table.aspx – Kane
데이터가 다양하지만 좋은 지적입니다. . 테이블 변수가 소량의 데이터로 더 많은 성능을 발휘한다면, 이것을 전환 할 것입니다. –
[SQL Server의 임시 테이블과 테이블 변수의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/27894/whats-the-difference-between-a-temp-table-and-table -variable-in-sql-server) 또는 this : http : // stackoverflow.com/questions/6991511/sql-server-temp-table-vs-table-variable 및 아마도 – gbn