선언 @myable 테이블이 두 유형의 테이블의 차이점은 무엇입니까? (#와 @)
답변
저장 프로 시저에서, 당신은 종종 내에서 데이터 세트를 저장하기위한 필요가있다 프로 시저,없이 에 해당 데이터를 필요로하는 것은 절차의 범위를 벗어나지 않습니다. 당신이 실제로 테이블 구조가 필요한 경우, 네 가지 방법이 기본적으로 할 수 있습니다 "저장"이 데이터 : 로컬 임시 테이블 (예 : #table_name), 전역 임시 테이블 (## 테이블 _), 영구 테이블 (TABLE_NAME) 및 테이블 변수 (@ 테이블 이름).
Should I use a #temp table or a @table variable?
, 당신은 또한 기본 를 만들 수 있습니다 CREATE TABLE 명령을 사용하거나 ALTER TABLE 명령을 사용하여 키를 입력하십시오. ALTER TABLE 명령을 사용하여 코드 내에 이 필요한 기본값, 새 열 또는 제약 조건을 추가 할 수 있습니다.가 tempdb에 데이터베이스 내의 물리적 테이블, 인덱스는 물리적 테이블이 .Because 임시 테이블을 생성 할 수 있습니다 로컬 및 글로벌 임시 테이블
로컬 및 글로벌 임시 테이블과 달리 테이블 변수에는 인덱스가 생성 될 수 없습니다. 예외는 테이블 변수가 기본 키가 생성 될 때 DECLARE @variable TABLE 명령을 사용하여 정의 될 수 있다는 것입니다. 그러면 테이블 변수 에 클러스터 된 또는 클러스터되지 않은 인덱스가 만들어집니다. CREATE INDEX 명령은 테이블 변수를 인식하지 못합니다. 따라서 인덱스는 이 기본 키와 함께 나타나는 인덱스이며 테이블 변수 선언에 생성 된 인덱스입니다. 또한 테이블 변수에 대한 트랜잭션 로그가 기록되지 않습니다. 따라서 트랜잭션 메커니즘의 범위를 벗어납니다.
'#myTable은 제약 조건과 인덱스 등을 가질 수있는 임시 테이블이며 많은 리소스를 사용합니다.
@myTable은 하나 이상의 열이있는 것으로 정의하는 테이블 변수입니다. 그들은 적은 자원을 사용하고 당신이 그들을 사용하는 절차에 적용됩니다.
임시 테이블이 사용되는 대부분의 경우, 성능상의 이점을 제공 할 수있는 테이블 변수가 대신 사용될 수 있습니다.
참조하십시오
종종 tempdb에 반대로 @table 변수는 메모리에 저장되어 있다고한다; 이것은 반드시 정확하지는 않습니다.
테이블 변수에는 통계가 없으므로 특정 상황에서 성능에 영향을 줄 수 있습니다.
테이블 #tabel1
은 tempdb에 저장된 로컬 임시 테이블입니다. ##table1
은 tempdb에 저장된 전역 임시 테이블입니다.
및 @table
은 테이블 변수입니다. 그들의 차이
검사에게 link를
테이블 변수는 상대적으로 작은 데이터 세트를 처리 할 때 잘 좋은,하지만 그들은 잘 확장되지 않는다는 점을 기억해주십시오. 특히 SQL Server 2000과 SQL Server 2005 간의 동작이 변경되어 대규모 데이터 세트로 인해 성능이 저하되었습니다.
SQL Server 2000의 매우 복잡한 저장 프로 시저를 사용하여 특히 어려운 상황이었습니다. 연구 및 테스트 결과 테이블 변수를 사용하는 것이 더 효과적인 방법이었습니다. 그러나 SQL Server 2008 성능 업그레이드 후 은 상당히으로 저하되었습니다. 이전의 모든 테스트 등으로 인해 임시 테이블이 더 빠르다고 판별했기 때문에 테이블 변수를 사용하는 것이 목화를 처리하는 데 다소 시간이 걸렸습니다. 그러나 SQL Server 버전 간의 이러한 변경으로 인해 이제는 정반대 였고 중요한 리팩토링에 이어 두 자릿수의 시간이 완료되어 몇 분 안에 완료되기 시작했습니다.
그래서 어떤 것이 가장 좋은지에 대한 확실한 답은 없습니다. 상황을 평가하고, 자신의 테스트를 수행하고, 결과를 토대로 결정을 내려야합니다. 그리고 항상 서버 업그레이드 후에 다시 평가하십시오. , 별도의 노트에 임시 테이블의 세 번째 유형도 있다는 것을 인식 - ## XYZ가 : http://www.sql-server-performance.com/articles/per/temp_tables_vs_variables_p1.aspx
업데이트 -
더 자세한 정보 및 샘플 타이밍은이 문서를 참조하십시오. 이들은 모든 SQL Server 연결에서 전역 적이며 볼 수 있으며 일반 임시 테이블과 같이 현재 연결 범위가 아닙니다. 그것들은 그것에 접근하는 마지막 연결이 닫힐 때에 만 떨어 뜨린다.- 1. 이 두 생성자의 차이점은 무엇입니까?
- 2. 이 두 PHP 오브젝트 인스턴스화 유형의 차이점은 무엇입니까?
- 3. 이 두 줄의 차이점은 무엇입니까?
- 4. 이 두 메소드의 차이점은 무엇입니까
- 5. 이 두 문장의 차이점은 무엇입니까?
- 6. 이 두 문장의 차이점은 무엇입니까?
- 7. 이 두 선언의 차이점은 무엇입니까?
- 8. 이 두 문자열의 차이점은 무엇입니까?
- 9. 이 두 코드의 차이점은 무엇입니까?
- 10. 이 두 쿼리의 차이점은 무엇입니까
- 11. LINQ의 두 쿼리 유형의 차이점은 무엇입니까?
- 12. 레일 : "email_field"와 "text_field"의 차이점은 무엇입니까?
- 13. doc 유형의 차이점은 무엇입니까
- 14. Java LinkedHashMap :이 두 가지의 차이점은 무엇입니까?
- 15. MySQL의 VARCHAR (255)와 TINYTEXT 문자열 유형의 차이점은 무엇입니까?
- 16. 동기 (이)와 동기화 방법의 차이점은 무엇
- 17. 이 두 코드 샘플의 차이점은 무엇입니까?
- 18. 이 두 스키마의 차이점은 무엇입니까? 코드 (매크로)
- 19. 이 두 프로토 타입의 차이점은 무엇입니까?
- 20. 이 두 지역 변수의 차이점은 무엇입니까?
- 21. 이 두 jQuery 함수의 차이점은 무엇입니까?
- 22. 루비 :이 두 배열과의 차이점은 무엇입니까?
- 23. 이 두 C++ 문장의 차이점은 무엇입니까?
- 24. 이 두 가지 JavaScript 함수의 차이점은 무엇입니까?
- 25. 이 두 LINQ 문의 차이점은 무엇입니까?
- 26. 원본 테이블의 isnull과 임시 테이블의 차이점은 무엇입니까?
- 27. JSONObject []와 JSONObject의 차이점은 무엇입니까?
- 28. ==와 대소 문자의 차이점은 무엇입니까?
- 29. 이 코드의 차이점은 무엇입니까?
- 30. 다양한 bool 유형의 차이점은 무엇입니까?
임시 테이블은 w.r.t와 같은 방식으로 작동합니다. 메모리/디스크. 가능한 경우 메모리에서 TempDB 데이터베이스에 DDL이 너무 큰 경우 디스크에 유지됩니다. – GilaMonster