3과목. 데이터베이스 구축 > 1장. 논리 데이터베이스 설계 > SQL 성능 튜닝 :
- Hint
- 힌트의 개념
- 사용자가 수동으로 어떠한 경우에도 실행 계획을 고정하기 위해 사용
- SQL의 힌트 사용의 예시
- 일반 형식 : SELECT a.dname, b.ename, b.sal
- 힌트 사용 시 : SELECT /* + use_nl(b,a) */ a.dname. b.ename, b.sal ( SELECT /* + hint[{hint} .... ] */ )
- 힌트의 개념
- SQL 부분범위 처리
- SQL 부분범위 처리의 개념
- 조건을 만족하는 전체범위를 처리하는 것이 아니라 일단 운반단위까지만 처리하여 추출하는 처리 방식
- SQL 부분범위 처리 목적
- 스캔 범위를 나누어서 운반단위를 가능한 빨리 채워서 처리 속도를 향상
- 일부분만 처리하고서도 Optimizer의 특성을 이용하여 정확한 결과를 도출
- 처리 범위가 넓더라도 빠른 속도를 얻도록 하기 위함
- SQL 부분범위 처리 적용 원칙
- 부분범위처리의 자격
- 논리적으로 일부분만 처리한 결과가 전체범위를 읽어 추가적인 가공을 하지 않고도 처리한 결과와 동일하다면 자격이 있음
- 부분범위처리를 할 수 없는 경우
- Order By가 사용된 경우
- UNION, MINUS, INTERSECT 등 조회 후 추가 연산을 사용한 경우
- 부분범위처리를 할 수 없는 경우의 대체
- Order By : Index를 이용하여 Order by를 하지 않아도 되는 형태로 대체
- MINUS, INTERSECT : EXISTS, NOT EXISTS, IN, NOT IN 등으로 대체
- 부분범위처리의 자격
- SQL 부분범위 처리 방안
- SQL 구문에 Order By가 있는 경우 인덱스 등을 이용하여 Order By를 삭제하는 형태로 변환
- 결과 컬럼을 얻어올 때 인덱스에서 모두 가져올 수 있는 항목인지를 살펴서 인덱스가 다시 테이블을 읽지 않아도 되는 형태로 사용
- 보통 사용하는 MAX(seq) + 1 형태를 버리고 역순 인덱스를 이용하여 Next Seq (다음 시권스값)를 구하는 형태로 변경
- 데이터의 존재 여부를 체크하는 등의 로직을 수행해야 할 때, count()를 수행하는 것보다는 EXISTS를 이용하여 존재여부를 파악
- SQL 부분범위 처리 VS 전체범위 처리 비교
구분 전체범위처리 부분범위처리 특징 주어진 조건의 범위가 좁은 경우는 문제가 없으나 넓은 경우는 빠른 수행 속도를 기대하기 어려움 처리할 범위가 아무리 넓다고 하더라도 그 범위 중의 일부만 처리 스캔방법 드라이빙 조건을 만족하는 범위를 모두 스캔 드라이빙 조건을 만족하는 범위를 차례로 스캔함 체크조건 처리 방법 체크조건 검증 후 성공한 건에 대해 임시 저장공간에 저장 체크 조건을 검증하여 성공한 건을 바로 운반단위로 보냄 결과추출 방법 저장이 완료되면 필요한 2차 가공을 한 후 운반단위만큼 추출시키고 다음 요구가 있을 때까지 일단 멈춤 운반단위가 채워지면 수행을 멈추고 결과를 추출
- SQL 부분범위 처리의 개념
800제-251번. 다음 SQL 문의 실행 결과는?
정답 : 3
800제-760번. 테이블 A, B의 해쉬조인을 유도하는 SQL의 힌트(Hint) 구문으로 올바른 것은?
① SELECT /* USE_HASH(A, B) */ FORM A, B WHERE A.NAME = B.NAME AND A.NAME ='이순신';
② SELECT /*+ USE_HASH(A, B) */ FORM A, B WHERE A.NAME = B.NAME AND A.NAME ='이순신';
③ SELECT // USE_HASH(A, B) // FORM A, B WHERE A.NAME = B.NAME AND A.NAME ='이순신';
④ SELECT /* USE_HASH(A, B) */ FORM A, B WHERE A.NAME = B.NAME AND A.NAME ='이순신';
정답 : 1
1000제-354번. 다음은 데이터베이스 SQL의 부분범위 처리 구문이다. 괄호 안에 들어갈 알맞은 명령어를 쓰시오.
SELECT ITEM_NM
FROM ITEM_TAB_HIST
WHERE ( )
(SELECT 'X'
FROM ITEM_TAB
WHERE DEPT = '101' AND SEQ > 100)
① EXISTS
② ORDER BY
③ HAVING
④ GROUP BY
정답 : 1
1000제-960번. 테이블 A, B의 해쉬조인을 유도하는 SQL의 힌트(Hint) 구문으로 올바른 것은?
① SELECT /* USE_HASH(A, B) */ FORM A, B WHERE A.NAME = B.NAME AND A.NAME ='이순신';
② SELECT /*+ USE_HASH(A, B) */ FORM A, B WHERE A.NAME = B.NAME AND A.NAME ='이순신';
③ SELECT // USE_HASH(A, B) // FORM A, B WHERE A.NAME = B.NAME AND A.NAME ='이순신';
④ SELECT /* USE_HASH(A, B) */ FORM A, B WHERE A.NAME = B.NAME AND A.NAME ='이순신';
정답 : 1
'보관함 > 정보처리기사_25년 02차' 카테고리의 다른 글
[오답정리] 데이터 제약 조건 (0) | 2025.05.16 |
---|---|
[오답정리] 관계 대수 : 순수 관계 연산자,일반 집합 연산자 (0) | 2025.05.14 |
[오답정리] 인터페이스 보안 코딩 (0) | 2025.05.14 |
[오답정리] 유지보수 (0) | 2025.05.14 |
[오답정리] 애드 혹(Ad-hoc) / 피코넷 (PICONET) (0) | 2025.05.14 |