인덱스를 타지 않는 경우

-- MSSQL 2009. 8. 3. 12:15
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
1. 컬럼의 가공이 있는 경우

예제1) HIREDATE는 date형

[인덱스를 타지 않음]
SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE TO_CHAR(HIREDATE,'YYYYMMDD') = '19980518';


[인덱스를 탐]
SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE HIREDATE BETWEEN TO_DATE('19980518'||'00:00:00','YYYYMMDD HH24:MI:SS')
AND TO_DATE('19980518'||'23:59:59','YYYYMMDD HH24:MI:SS')

예제2) SALARY는 number형

[인덱스를 타지 않음]
SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE SALARY + 1000 > 100000;

[인덱스를 탐]
SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE SALARY > 100000 - 1000;

2. 조건으로 NULL을 찾는 경우

SELECT LAST_NAME,FIRST_NAME
FROM EMPLOYEES
WHERE JOB IS NULL

Oracle에서는 NULL값으로 인덱스를 만들 수 없다고 한다.
(MSSQL도 그런지는 한번 찾아봐야겠다)

3. 부정형을 조건으로 쓸 경우

SELECT LAST_NAME,FIRST_NAME
FROM EMPLOYEES
WHERE JOB NOT IN ( 'INSTRUCTOR','STAFF');

부정형으로 조건을 쓸 경우 인덱스를 타지 않아 성능에 영향을 미친다.

출처 : http://www.devpia.com/DevStudy/BBS/View.aspx?s=1&type=c

'-- MSSQL' 카테고리의 다른 글

Index ReOrganize  (0) 2009.08.03
DBCC SHOWCONTIG  (0) 2009.08.03
Oracle vs MSSQL  (0) 2009.07.10
특정테이블을 날렸을 때 복구방법  (0) 2009.06.19
SQL Server 2000 Wait Types  (0) 2009.06.19
posted by 어린왕자악꿍