ROLLBACK 
GO

SET STATISTICS IO OFF
IF OBJECT_ID('tblx') IS NOT NULL
    DROP TABLE tblx
GO
CREATE TABLE tblx (
    c1 int,
    c2 int,
    c3 char(2000) default 'a'
)
GO
SET NOCOUNT ON
DECLARE @idx  int = 0
BEGIN TRAN
WHILE (@idx < 7000)
BEGIN
    INSERT tblx (c1, c2) VALUES (@idx, @idx % 100)
    SET @idx += 1
END
COMMIT TRAN
GO

SELECT * FROM tblx;
--7000
INSERT INTO tblx (c1, c2)
SELECT 20000 c1, 100 c2 FROM tblx
GO
--14000
CREATE CLUSTERED INDEX cl_tblx ON tblx(c2)
GO
CREATE NONCLUSTERED INDEX ncf_tblx_1 ON tblx (c1) WHERE (c1 < 20000)
GO
CREATE NONCLUSTERED INDEX ncf_tblx_2 ON tblx (c1) WHERE (c1 = 20000)
GO
CREATE NONCLUSTERED INDEX ncf_tblx_3 ON tblx (c1) WHERE (c1 > 20000)
GO
IF OBJECT_ID('usp_a') IS NOT NULL
    DROP PROC usp_a
GO
CREATE PROC usp_a
(@a int)
AS
SELECT c1, c2 FROM tblx WHERE c1 = @a
GO

-- TEST

SET STATISTICS PROFILE ON
SET STATISTICS IO ON
EXEC dbo.usp_a 1
--1
StmtText : 
SELECT c1, c2 FROM tblx WHERE c1 = @a
  |--Clustered Index Scan(OBJECT:([head1ton].[dbo].[tblx].[cl_tblx]), WHERE:([head1ton].[dbo].[tblx].[c1]=[@a]))
 
ALTER PROCEDURE usp_a
(@a int)
AS
SELECT c1, c2 FROM tblx WITH (INDEX(ncf_tblx_1)) WHERE c1 = @a
GO

EXEC dbo.usp_a 1
GO
메시지 8622, 수준 16, 상태 1, 프로시저 usp_a, 줄 4
이 쿼리에 정의된 힌트로 인해 쿼리 프로세서에서 쿼리 계획을 생성할 수 없습니다. 힌트를 지정하거나 SET FORCEPLAN을 사용하지 않고 쿼리를 다시 전송하십시오.

ALTER PROC usp_a
(@a int)
AS
SELECT c1, c2 FROM tblx WHERE c1 = @a AND c1 < 20000
GO

EXEC dbo.usp_a 1
GO 
SELECT c1, c2 FROM tblx WHERE c1 = @a AND c1 < 20000
  |--Index Seek(OBJECT:([head1ton].[dbo].[tblx].[ncf_tblx_1]), SEEK:([head1ton].[dbo].[tblx].[c1]=[@a]) ORDERED FORWARD)

--고정으로 꼭 하고 싶은 경우
ALTER PROC usp_a
(@a int)
AS
SELECT c1, c2 FROM tblx WITH (INDEX(ncf_tblx_1)) WHERE c1 = @a AND c1 < 20000
GO

EXEC dbo.usp_a 1
GO 
SELECT c1, c2 FROM tblx WITH (INDEX(ncf_tblx_1)) WHERE c1 = @a AND c1 < 20000
  |--Index Seek(OBJECT:([head1ton].[dbo].[tblx].[ncf_tblx_1]), SEEK:([head1ton].[dbo].[tblx].[c1]=[@a]) ORDERED FORWARD)



예를 보듯이 WHERE 조건에 인덱스 조건을 성립시켜 처리한다.


'연구개발 > DBA' 카테고리의 다른 글

대용량 데이터베이스 통계 옵션 설정  (0) 2010.07.19
트랜잭션이 걸려있는지 확인  (0) 2010.07.16
SQL Errorlog 수집 자동화  (0) 2010.07.16
백업확인  (0) 2010.07.15
DBA 가이드  (0) 2010.07.08

+ Recent posts