반응형
- /**********************************************************************************************
-- Title : [2k5] Auto-Parameterization 데모
-- Reference : mcpworld.com
-- Key word : parameterization is_parameterization_forced
**********************************************************************************************/
--CLEAN UP
/*
DROP DATABASE TESTDB
GO
*/
--임시 데이터베이스 생성
CREATE DATABASE TESTDB
GO
USE TESTDB
GO
--임시 테이블 생성
CREATE TABLE TestTable
(
seq int identity not null,
vals int not null default(100)
)
GO
--값 입력 : 1~10까지는 2개씩, 100의 값은 10000개 입력
SET NOCOUNT ON
DECLARE @I AS INT
SET @I = 1
WHILE @I<=10
BEGIN
INSERT TestTable(vals) values(@I);
INSERT TestTable(vals) values(@I);
SET @I = @I + 1
END
GO
INSERT TestTable(vals) DEFAULT VALUES
GO 10000
SET NOCOUNT OFF
GO
-- vals 컬럼 인덱스 생성
CREATE INDEX IDX_VALS ON TestTable(vals)
GO
--I/O 정보 출력, 실제 실행 계획(CTRL + M) 표시 하도록 설정
SET STATISTICS IO ON
GO
----------------------------------------------------------------------------------
/*
ALTER DATABASE TESTDB
SET Parameterization SIMPLE;
GO
*/
SELECT is_parameterization_forced FROM master.sys.databases where name = 'TestDB'
GO
--0 : AutoParameterization 기능 비활성화 (기본값)
SELECT seq FROM TestTable WHERE vals = 1
/*
테이블 'TestTable'. 검색 수 1, 논리적 읽기 수 4, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
*/
SELECT seq FROM TestTable WHERE vals = 10
/*
테이블 'TestTable'. 검색 수 1, 논리적 읽기 수 4, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
*/
SELECT seq FROM TestTable WHERE vals = 100
/*
테이블 'TestTable'. 검색 수 1, 논리적 읽기 수 22, 물리적 읽기 수 0, 미리 읽기 수 32, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
*/
--------------------------------------------------
-- Auto-Parameterization 설정
--------------------------------------------------
ALTER DATABASE TESTDB
SET Parameterization FORCED;
GO
SELECT is_parameterization_forced FROM master.sys.databases where name = 'TestDB'
GO
--1 : AutoParameterization 기능 활성화
--기존 실행 계획 및 실행 버퍼 풀 초기화
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
GO
SELECT seq FROM TestTable WHERE vals = 1
/*
테이블 'TestTable'. 검색 수 1, 논리적 읽기 수 4, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
*/
SELECT seq FROM TestTable WHERE vals = 10
/*
테이블 'TestTable'. 검색 수 1, 논리적 읽기 수 4, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
*/
SELECT seq FROM TestTable WHERE vals = 100
/*
테이블 'TestTable'. 검색 수 1, 논리적 읽기 수 10021, 물리적 읽기 수 21, 미리 읽기 수 17, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
*/
--CLEAN UP
/*
SET STATISTICS IO OFF
GO
USE MASTER
GO
DROP DATABASE TESTDB
GO
*/
반응형