데이터베이스 설계와 구축(개정판) (2009년)
SQL 문장 튜닝 0 0 54,411

by 구루비스터디 데이터베이스튜닝 SQL 문장 튜닝 [2019.07.14]


SQL 문장을 작성할 때 꼭 알고 있어야 할 사항

  • 접근 경로에 대한 우선순위를 알고 있어야 한다.
    • 1. ROWID에 의한 단일 로우
    • 2. 클러스터 조인에 의한 단일 로우
    • 3. 유일하거나 PK 를 가진 해시 클러스터키에 의한 단일 로우
    • 4. 유일하거나 PK에 의한 단일 로우
    • 5. 클러스터 조인
    • 6. 해시 클러스터 키
    • 7. 인덱스 클러스터 키
    • 8. 복합 컬럼 인덱스
    • 9. 단일 컬럼 인덱스
    • 10. 인덱스가 구성된 컬럼에서 제한된 범위 검색
    • 11. 인덱스가 구성된 컬럼에서 무제한 범위 검색
    • 12. 정렬-병합 조인
    • 13. 인덱스가 구성된 열에서 MAX 또는 MIN
    • 14. 인덱스가 구성된 열에서 ORDER BY
    • 15. 풀 테이블 스캔
  • 옵티마이져 모드가 비용 기반 모드인지 규칙 기반 모드인지 알고 있어야 한다.
  • 숫자 형식은 숫자 형식의 타입으로 문자 형식은 문자 형식의 타입으로 비교한다.
  • WHERE 절 안에 비교하는 조건에 인덱스를 이용해야 할 경우 인덱스 컬럼을 기술한다.
  • 여러 개의 컬럼이 인덱스 하나로 지정된 경우 WHERE 절에 모두 기술한다.
  • 여러 개의 컬럼이 인덱스 하나로 지정된 경우 앞쪽에 있는 컬럼을 모두 지정하여 인덱스 범위를 조회할 수 있게 한다.
  • 인덱스를 이용하고자 하는 컬럼을 변형하지 않는다.
  • 인덱스 컬럼에 NULL값을 사용하지 않는다.
  • 부정형으로 지정할 경우에는 인덱스를 사용하지 않는다. 가능하면 부정형을 사용하지 않는다.
  • OR를 사용하면 인덱스를 이용하지 않을 수 있다.
  • 불필요하게 DUAL 테이블을 이용하지 않는다.
  • WHERE 조건절에 걸린 인덱스가 데이터를 20% 이상 반환하리라 예상되면 인덱스 스캔을 피한다.
  • 불필요하게 DBMS 에서 제공된 함수(SUM,SGIN,DECODE,NVL 등)를 사용하지 않는다.
  • 인덱스가 걸려있는 컬럼에 대해 LIKE 형식으로 비교하는 경우에는 반드시 뒤쪽에 비교자(%)가 위치해야 하며, 앞쪽에 위치할 경우에는 인덱스를 이용하지 않는다.
  • 힌트를 적절하게 사용한다.

dual table 정보

– Online Help
Selecting from the DUAL Table

DUAL is a table automatically created by Oracle along with the data dictionary.
DUAL is in the schema of the user SYS, but is accessible by the name DUAL to all users.
It has one column, DUMMY, defined to be VARCHAR2(1), and contains one row with a value 'X'.
Selecting from the DUAL table is useful for computing a constant expression
with the SELECT statement.
Because DUAL has only one row, the constant is returned only once.
Alternatively, you can select a constant, pseudocolumn, or expression from any table,
but the value will be returned as many times as there are rows in the table

-- 메타링크 공지:363988.1

Originally, this table was introduced by Oracle for its internal processing, for example, RMAN
uses this table to fetch the current date for a backup. Contention on this table can occur, if
application uses this table frequently and concurrently, with common waits like Buffer Busy Wait,
Latch Free (Cache Buffer Chain / Cache Buffer LRU chain). The behaviour of this table is changed in
Oracle database version 10g and hence, this note is only applicable for database versions 9i and below.

"구루비 데이터베이스 스터디모임" 에서 2009년에 "데이터베이스 설계와 구축(개정판)" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/4175

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입