Oracle 흔 한 힌트

4413 단어 오 라 클 튜 닝
Hint 는 select / update / merge / insert 를 직접 따 르 지 않 으 면 소 용이 없습니다.구조: / * + * /
Parallel (4): Oracle 은 생산자 - 소비자 모델 을 동시에 사용 하기 때문에 각 그룹의 생산자 / 소비자 에 게 4 개의 slave 가 있다 는 것 을 나타 낸다.실제 프로 세 스 수 는 N * 4 + 1 개, 보통 N = 2 입 니 다.1 은 QC, Query Coordinator 입 니 다.
Append: insert 구문 에서 흔히 볼 수 있 으 며, 명령 오 라 클 은 direct - path load 를 사용 합 니 다.
Leading (): 오 라 클 이 join (hash join, nested loop join, merge join) 을 실행 할 때의 연결 순 서 를 표시 합 니 다.
select /*+ leading(t1) */
t1.ename, t2.dname
from emp t1, dept t2
where t1.deptno=t2.deptno

4. 567913. 반대로 다음 과 같다.
----------------------------------------------------------------------------------------
| Id  | Operation                    | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |         |       |       |    18 (100)|          |
|   1 |  NESTED LOOPS                |         |       |       |            |          |
|   2 |   NESTED LOOPS               |         |    15 |   360 |    18   (0)| 00:00:01 |
|   3 |    TABLE ACCESS FULL         | EMP     |    15 |   135 |     3   (0)| 00:00:01 |
|*  4 |    INDEX UNIQUE SCAN         | PK_DEPT |     1 |       |     0   (0)|          |
|   5 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     1 |    15 |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------------------

4. 567913. 연결 순서 가 다 르 기 때문에 Oracle 이 사용 하 는 연결 방식 도 바 뀌 었 습 니 다.
여기 서 는 leading (t1, t2) 또는 leading (t2, t1) 이 라 고 쓸 수 있 습 니 다.
서로 모 순 된 leading 이 여러 개 존재 한다 면 Oracle 은 모든 leading 을 무시 할 것 이다.Ordered Hint 의 우선 순 위 는 leading 보다 높다.
Ordered: Oracle 에 결과 집합 이 SQL 에서 나 오 는 순서에 따라 연결 하도록 지시 합 니 다.Oracle 에서 연결 순 서 를 선택 할 수 없습니다.Oracle 은 ordered 가 아 닌 leading 를 사용 할 것 을 공식 적 으로 건의 합 니 다.예:
select /*+ leading(t2) */
t1.ename, t2.dname
from emp t1, dept t2
where t1.deptno=t2.deptno;

Merge (): Oracle 에 View Merge 를 사용 하 라 고 지시 하 는데 전 제 는 View Merge, Oracle 을 할 수 있다 는 것 이다.예:
-----------------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |       |       |       |   236 (100)|          |
|*  1 |  HASH JOIN         |      |    15 |   360 |  2640K|   236   (1)| 00:00:03 |
|   2 |   TABLE ACCESS FULL| DEPT |   100K|  1465K|       |   103   (1)| 00:00:02 |
|   3 |   TABLE ACCESS FULL| EMP  |    15 |   135 |       |     3   (0)| 00:00:01 |
-----------------------------------------------------------------------------------

Result_Cache:  Query Result cache 기능 을 사용 하여 Shared pool 의 Result Cache 에 SQL 결 과 를 집합 합 니 다.SQL 의 함 수 는 반드시 deterministic 이 어야 합 니 다. 예 를 들 어 sysdate 는 그렇지 않 습 니 다.
Index (): 0, 1, N 개의 index 를 쓸 수 있 습 니 다.만약 0 개가 있다 면, Oracle 은 사용 가능 한 인덱스 의 원 가 를 고찰 하고 가장 작은 것 을 선택 하 십시오.N 개 라면 Oracle 은 목록 에 있 는 모든 색인 의 원 가 를 살 펴 보고 가장 작은 것 을 선택 합 니 다.0 개 또는 N 개 일 때 Oracle 은 여러 개의 색인 을 사용 하여 결과 집합 을 합 칠 수 있 습 니 다.1 개 시 Oracle 은 이 색인 만 고려 하고 전체 표 스 캔 을 사용 하지 않 습 니 다.예:
SELECT /*+ ORDERED */ o.order_id, c.customer_id, l.unit_price * l.quantity
FROM customers c, order_items l, orders o
WHERE c.cust_last_name = 'Taylor'
AND o.customer_id = c.customer_id
AND o.order_id = l.order_id;

Full (): 전체 표 스 캔 을 사용 합 니 다.예:
SELECT /*+ MERGE(v) */ e1.last_name, e1.salary, v.avg_salary
FROM employees e1,
(SELECT department_id, avg(salary) avg_salary
FROM employees e2
GROUP BY department_id) v
WHERE e1.department_id = v.department_id
AND e1.salary > v.avg_salary
ORDER BY e1.last_name;

Use_hash: 해시 로 연결 합 니 다.예 를 보 세 요. 여기 서 연결 순 서 는 l 이 앞 에 있 는 것 이 아니 라 h 가 뒤에 있 습 니 다.Oracle 은 자동 으로 원가 에 따라 연결 순 서 를 선택 합 니 다.Leading () 이 지정 해 야 합 니 다.이 상황 은 use 에 적용nl 과 usemerge。
SELECT /*+ INDEX (employees emp_department_ix)*/ employee_id, department_id
FROM employees
WHERE department_id > 50;

Use_NL: 끼 워 넣 기 순환 연결 을 사용 합 니 다.
SELECT /*+ FULL(e) */ employee_id, last_name
FROM hr.employees e
WHERE last_name LIKE :b1;

Use_Merge: Merge sort join 을 사용 합 니 다.

좋은 웹페이지 즐겨찾기