고려사항
- SQL의 성능을 악화시키는 최대 요인은 불필요한 I/O
- 최소의 Block Read를 통해서 조회
- 결과 UI의 페이징처리로 데이터 범위를 최소화
- 간결한 Query
효율적인 사용법
WHERE SUBSTR(DNAME,1,3)='ABC' ===> WHERE DNAME LIKE 'ABC%'
WHERE SAL*12=1200 ===> WHERE SAL=1200/12
WHERE TO_CHAR(HIREDATE,'YYMMDD')='940101' ===> WHERE HIREDATE=TO_DATE('940101','YYMMDD')
- 컬럼비교시 같은 데이터 타입으로 비교
CHA CHAR(10)
NUM NUMBER(2,3)
VAR VARCHAR2(20)
DAT DATE
아래와 같이 자동으로 변경됨으로 주의!!
WHERE CHA=10 ==자동==> WHERE TO_NUMBER(CHA)=10
WHERE VAR=10 ==자동==> WHERE TO_NUMBER(VAR)=10
WHERE NUM LIKE '9410%' ==자동==> WHERE TO_CHAR(NUM) LIKE '9410%'
- NULL값의 비교시
WHERE ENAME IS NOT NULL ===> ENAME>'' /*SPACE*/
WHERE COMM IS NOT NULL ===> COMM>0 /*숫자형이며 양수만 가능*/
WHERE COMM IS NULL ===> COMM의 디폴트값을 0으로 하고 COMM=0으로 검색
- 부정형 비교시
WHERE EMPNO<>'1234' ===> WHERE NOT EXISTS (SELECT 'X' FROM EMP WHERE EMPNO='1234')
- 기타
힌트 사용 제한
SELECT 절에는 반드시 필요한 컬럼만 나열
반드시 필요한 경우에 대해서만 Outer Join 사용
불필요한 Distinct 사용제한
가능하다면 UINON 보다 UNION ALL을 사용
복잡한 OR 사용은 IN 이나 UNION ALL로 변경
댓글 없음:
댓글 쓰기