테이블 변수와 TF 2453
-
Version : SQL Server 2005, 2008, 2008R2, 2012
테이블변수에 데이터를 삽입하면 카디널리티는 항상 1 이다. 행이 적을 경우에는 큰 문제가 되지 않지만 행이 많을 경우에는 쿼리 계획을 효율적으로 생성하지 못하여 쿼리 성능이 저하될 수 있다.
dbcc traceoff(2453,-1) go dbcc freeproccache go set statistics profile off go use tempdb go if OBJECT_ID ('t2') is not null drop table t2 go create table t2 (c2 int) go create index ix_t2 on t2(c2) go --insert 100,000 rows into the perm table set nocount on begin tran declare @i int set @i = 0 while @i < 100000 begin insert into t2 values (@i) set @i = @i + 1 end commit tran go --update stats update statistics t2
go
set nocount on declare @t1 table (c1 int) begin tran declare @i int set @i = 0 while @i < 100000 begin insert into @t1 values (@i) set @i = @i + 1 end commit tran set statistics profile on select * from @t1 inner join t2 on c1=c2 go
set statistics profile off |
SQL Server 2012 SP2 에서는 테이블변수에 대한 카디널리티를 개선했다. 이 개선은 테이블변수에 많은 행이 있을 경우에도 도움이 된다. SQL Server 2012 SP2에서 TF2453을 활성화 하면 테이블 변수를 사용하더라도 정확한 카디널리티를 예측하여 효율적인 쿼리 계획을 생성 할 수 있다.
dbcc freeproccache go dbcc traceon(2453,-1)
set nocount on declare @t1 table (c1 int) begin tran declare @i int set @i = 0 while @i < 100000 begin insert into @t1 values (@i) set @i = @i + 1 end commit tran set statistics profile on select * from @t1 inner join t2 on c1=c2 go
set statistics profile off |
-
SQL Server 2012 SP2 다운로드 :
http://www.microsoft.com/ko-kr/download/confirmation.aspx?id=43340
[참고자료]
2014-09-01 / 강성욱 / http://sqlmvp.kr
SQL Server 2012 SP2, SQL Server Service pack, 테이블변수, 임시테이블, 테이블변수 카디널리티, 실행계획, 쿼리튜닝, DB튜닝, SQL, MSSQL, SQL
'SQL Server > SQL Server Tip' 카테고리의 다른 글
컬럼스토어 인덱스 동시성 (0) | 2015.07.23 |
---|---|
컬럼스토어 인덱스 ROW와 ROWGROUP 영향 (0) | 2015.07.23 |
Sp_trace_create MaxfileSize 오류 (0) | 2015.07.23 |
RANDBETWEEN 함수 만들기 (0) | 2015.07.23 |
Optimize for hint 쿼리 최적화 (0) | 2015.07.23 |