1. Trang chủ
  2. » Công Nghệ Thông Tin

Orale 8 Database for Windows NT part 7 docx

94 219 0
Tài liệu được quét OCR, nội dung có thể không chính xác

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 94
Dung lượng 1,54 MB

Nội dung

Trang 1

Cau lénh ALTER SESSION OPTIMIZER _GOAL khéng tac déng dén SQL duge tién hanh ti trong PL/SQL

PL/SQL bỏ qua tham số khơi hoạt OPTIMIZER MODE = FIRST_ROWS

Bạn có thể sử dụng các gợi ý để xác định đường đẫn truy xuất cho các câu lệnh SQL được dé trinh tir trong PL/SQL

Chọn các đường dẫn truy xuất

Một trong các chọn lựa quan trọng nhất mà bộ tối ưu hóa tạo ra khi lập công thức một kế hoạch tiến hành là cách truy hải dữ liệu từ cơ sở dữ liệu Đối với hàng bất kỳ trong bảng bất kỳ được câu lệnh SQL truy xuất, có thể có nhiều đường dẫn truy xuất mà hàng đó có thể định vị và truy hôi Bộ tối ưu hóa chọn trong số chung

Phần này đề cập đến:

Ccspp căn bán Oracle có thể truy xuất dữ liệu

Mỗi đường dẫn truy xuất và khi bộ tối ưu hóa có thể sử dụng nó

Bộ tối ưu hóa chọn giữa các đường dẫn truy xuất khả dụng như

thế nào

Các phương pháp truy xuất

Phần này mô tả các phương pháp căn bản Oracle có thể truy xuất đữ liệu

Duyệt toàn bộ bảng,

Duyệt toàn bộ bảng truy hỏi các hàng từ một bảng Để thực biện

duyệt toàn bộ bảng, Oraele đọc tất cá các hàng trong bảng ấy, kháo sát mỗi đògn để xác định xem nó có thóa mãn mệnh để WHERE của câu lệnh ấy không Oracle đọc mọi khối dữ liệu được

Trang 2

được thực hiện rất hiệu quá sử dụng đọc dữ liệu déng thoi Oracle đọc mỗi khối dữ liệu chỉ một lần

Truy xuất bảng ROWID

Truy xuất bảng bằng ROWID cũng truy xuất từ một bảng

ROWID của hàng xác định kiểu dữ liệu và khối đữ liệu chứa

hàng ấy và vị trí của hàng trong khéi dé Dinh vi hang bằng

ROWID cua nó là cách nhanh nhát cho Oracle để tìm một hàng đơn

Để truy xuất một bảng bằng ROWID, trước hết Oracle có được

các ROWID của các hàng được lựa từ mệnh để WHERE của câệnnnnh hoặc bằng cách duyệt chỉ mục của một hoặc nhiều chí mục của bảng Sau đó Oracle định vị mỗi hàng được lựa trong bảng dựa trên ROWID của nó

Duyệt cụm liên kết

Từ một bảng được lưu trữ trong cụm liên kết có chỉ mục duyệt cụm liên kết truy hồi các hàng có cùng giá trị khóa cựm liên kết Trong cụm liên kết có chỉ mục, tất cả các hàng có cùng giá trị khóa cụm liên kết được lưu trữ trong cùng các khối dữ liệu Để thực hiện duyệt cụm liên kết, trước hết Oracle có được ROWID của một trong các hàng được lựa bằng cách duyệt chỉ mục cụm liên kết Sau đó Oracle định vị các hàng dựa trên ROWID này

Duyệt trị số

Oracle có thể sử dụng duyệt trị số để định vị các hàng trong cụm liên kết trị số dựa trên giá trị số Trong cụm liên kết trị sở, tất cả các hàng có cùng giá trị trị số được lưu trữ trong cùng những khối dữ liệu Để thực hiện duyệt trị số, trước hết Oracle có được giá trị số ấy bằng cách áp dụng hàm trị số vào giá trị khóa cụm liên kết được câu lệnh ấn định Sau đó Oracle duyệt các khối dừ

Trang 3

Duyét chi mục

Duyệt chỉ mục truy hồi dữ liệu từ một chỉ mục dựa trên giá tri của một hoặc nhiều cột của chỉ mục ấy Để thực hiện duyệt chỉ mục, Oracle tìm chí mục ấy để có các giá trị cột được câu lệnh truy xuất Nếu câu lệnh ấy chỉ truy xuất các cột của chỉ mục, thì Oracle doc nhitng giá trị cột có chỉ mục trực tiếp từ chỉ mục ấy thay vì từ báng

Chí mục không những có giá trị chỉ mục, mà còn các ROWID của các hàng trong bảng có giá trị đó Vì thế, nếu câu lệnh truy xuất

các cột khác bổ sung vào các cột có chỉ mục, Oracle có thể tìm

các hàng trong bảng với truy xuất bảng bằng ROWID hoặc duyệt

cụm liên kết

Duyệt chỉ mục có thể là một trong các kiểu sau:

Duyệt duy nhất một chỉ mục chỉ cho trở lại một ROWID đơn Oracle thực hiện duyệt duy nhất chỉ trong trường hợp một ROWID đơn Duyệt duy nhất [cần thiết, thay vì nhiều ROWID Thí dụ, Oracle tùy chọn duyệt duy nhất nếu có một hạn định UNIQUE hoặc PRIMARY KEY bảo đảm câu lệnh ấy chỉ truy xuất một hàng đơn

Duyệt phạm vi của một chỉ mục có thể cho trở

Duyệt phạm ví Ìlại zêrơ hoặc nhiều ROWID tùy theo câu lệnh truy xuất bao nhiêu hàng

Tuyệt toàn bộ chỉ mục có thể sử dụng nếu

một tối ưu hóa tham chiếu một trong các cột trong chỉ mục ấy Tối ưu hóa không phải là

một trình điều khiển chỉ mục Duyệt toàn bộ còn có thể sử dụng khi không có thuộc tính

nếu tất cả các cột trong bảng được tham chiếu trong truy vấn có trong chỉ mục và ít nhất một trong các cột không thể rỗng Duyệt toàn Duyệt toàn bộ

Trang 4

bộ có thé được sử dụng đế loại trừ phép toán sắp xếp Nó đọc từng khối Duyệt toàn bộ nhanh

Đuyệt chỉ mục toàn bộ nhanh là thay cho đuyệt toàn bộ bảng khi chỉ mục có tất cả các cột cần thiết cho truy vấn và ít nhất một cột trong chỉ mục có hạn định NOT NULL Qứt toàn bộ nhanh truy xuất đữ liệu trong chính chỉ mục mà không truy xuất bảng Nó không

thể được sử dụng để loại từ phép toán sắp

xếp Nó đọc toàn bộ chỉ mục sử dụng đọc dữ

liệu đồng thời (không giống như duyệt toàn bộ chỉ mục) và có thể được song song hóa,

Đuyệt toàn bộ nhanh chỉ có thể sử dụng với

sự tối ưu hóa dựa trên phí tổn bạn có thể ấn

định nó với tham sé khởi hoạt

FAST_FULL SCAN ENABLED hoặc gợi ý

INDEX_FFS

Bitmap Các chỉ mục bitmap sử dụng bitmap cho các

giá trị khóa và ánh xạ hàm chuyển đổi mỗi vị

trí bit vào ROWID Các bitmap hợp nhất các

chỉ mục hiệu quả để đáp ứng nhiều điều kiện

trong mệnh để WHERE, sử dụng các phép toán Boolean để giải quyết các điều kiện AND và OR Truy xuất bitmap chỉ có thể sử dụng

với tối ưu hóa dựa trên phí tổn Xem “Các Chỉ

Muc Bitmap”

Luu y:

Các chỉ mục bitmap chỉ có thể sử dụng nếu ban cé Oracle Enterprise Edition Xem “Getting to Know Oracle8 va Oracle8 Enterprise Edition”

Các đường truy xuất

Trang 5

lệnh có điểu kiện mệnh để WHERE hoặc cáu trúc khác để tạo đường dẫn truy xuât khả dụng

Cách giải quyết dựa trên phí tổn chọn đường dẫn dựa trên tài

nguyên sử dụng (xem “Chọn Trong Các Đường Dẫn Truy Xuất Với Cách Giải Quyết Dựa Trên Phí Tốn”

Cách giải quyết dựa trên nguyên tắc sử dụng cấp của mỗi đường

dẫn để chọn đường dẫn khi có thể sử dụng nhiều đường dẫn (xem

“Chọn Trong Các Đường Dẫn Truy Xuất Với Cách Giải Quyết Dựa Nguyên TÁC”)

Bảng 20-1 Các đường dẫn truy xuất

Cấp Đường dẫn truy xuất

Một hàng đơn bing ROWID

Hàng đơn bằng liên kết cụm liên kết

3 Hang don bang khéa cum liên kết trị số với khóa

duy nhất hoặc khóa chính 4 Hàng đơn bằng khóa duy nhất hoặc khóa chính 5 Liên kết cụm liên kết 6 Khóa cụm liên kết trị số 7 Khoa cụm liên kết có chỉ mục 8 Khóa tổng hợp 9 Các chỉ mục cột đơn 10 Tìm phạm vi biên trên các cột có chỉ mục i : Tìm phạm vi không có biên trên các cột có chỉ mục 12 Liên kết hợp nhất-sắp xếp 13 Cật có chỉ mục MAX hoặc MỊN 14 ORDER BY trén cde cột có chỉ mục 15 Duyệt toàn bộ bảng Các Đường Dẫn Truy Xuất Không Có Cấp

[Duyệt toàn bộ chỉ mục nhanh (không thể sử dụng với bộ tối ưu hóa đựa trên nguyên tắc): xem

Trang 6

Oracle8 Tuning

[Duyệt chí mục bitmap (không thế sử dụng với bộ - tối ưu hóa dựa trên nguyên tắc): xem “Các Chỉ Mục Bitmap” Mỗi phần sau mô tả một đường dẫn truy xuất va: Khi nó có thể sử dụng

Phương pháp Oracle sử dụng để truy xuất dữ liệu với nó Kết xuất được phát sinh cho nó bằng lệnh EXPLAIN PLAN

Đường dẫn 1: hàng đơn bằng ROWID

Đường dẫn truy xuất này chỉ có thể sứ dụng nếu mệnh đề 'WHERE của câu lệnh nhận dang các hàng được ROWID lựa hoặc với cú pháp SQL nhúng CURRENT OF CURSOR được các Oracle Precompiler hỗ trợ Để tiến hành câu lệnh ấy, Oracle truy xuất

bảng bằng ROWID

Thí dụ:

Đường dẫn truy xuất này có thể sử dụng trong câu lệnh sau:

SELECT * FROM emp WHERE ROWID =

`AAAATbAABAAAA1UAAA;

Kết xuất EXPLAIN PLAN cho câu lệnh này có thể nhìn như sau:

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENT

TABLE ACCESS BY ROWID EMP

Đường dẫn 2: hàng đơn bằng liên kết cựm liên kết

Trang 7

« Mệnh để WHERE của câu lệnh bằng mỗi cột của khóa cụm liên kết với cột tương ứng trong báng khác

¢ Menh dé WHERE ctia câu lệnh có điều kiện báo đảm là liên kết chỉ cho trở lại một hàng Điều kiện như thế có thể là một điểu kiện bằng trên tcác) cột của một khóa duy nhất hoặc khóa chính

Những điều kiện này phải được kết hợp với các toán tử AND Để tiến hành câu lệnh ấy, Oracle thực hiện các phép toán vòng lặp lỗng nhau (Để có thông tin về các phép toán vòng lặp iŠng nhau, xem “Các Phép Toán Liên Kết”.)

Thí dụ:

Đường dẫn truy xuất này có thể sử dụng cho câu lệnh sau trong đó các bảng EMP và DEPT được liên kết trên cột DEPTNO và EMPNO là khóa chinh cua bang EMP:

SELECT *

FROM emp, dept

WHERE emp.deptno = dept.deptno AND emp.empno = 7900; Kết xuất EXPLAIN PLAN cha câu lệnh này có thể nhìn giống như sau: OPERATION ` OPTIONS OBJECT_NAME SELECT STATEMENT NESTED LOOPS

TABLE ACCESS BY ROWID EMP

INDEX UNIQUE SCAN PK_EMP

TABLE ACCESS CLUSTER DEPT

Trang 8

Đường dẫn 3: hàng đưn bằng khóa cụm liên kết trị số với

khóa duy nhất hoặc khóa chính

Đường dẫn này có thể sứ dụng nếu cả hai điều kiện sau đúng: ® - Mệnh để WHERE của câu lệnh sử dụng tất cá các cột của

khóa cụm liên kết trị số trong các điều kiện bằng nhau

Đối với các khóa cụm tống hợp, thì các điều kiện bằng nhau phải được kết hợp với các toán tử AND

* - Câu lệnh được bảo đảm chỉ cho lại một hàng vì các cột thiết lập khóa cụm liên kết trị số cũng chỉ thiết lập một

khóa duy nhất hoặc khóa chính

Để tiến hành cầu lạnh ấy, Oraele áp dụng hàm trị số của cụm liên kết ấy vào giá trị khóa cụm liên kết trị số được ấn định trong câu lệnh để có được giá trị trị số Sau đó Oracle sử dụng giá trị số để thực hiện duyệt trị số trên bảng

Thí dụ:

Trang 9

Đường dẫn 4: hàng đưn bằng khóa đuy nhất hoặc khóa chính

Đường dẫn truy xuất này có thể sử dung néu ménh dé WHERE của câu lệnh sử dụng tất cá các cột của khóa duy nhất hoặc khóa

chính trong các điều kiện bằng nhau Đối với các khóa tổng hợp,

các điều kiện bằng nhau phải được liên kết với các phép toán AND Để tiến hành câu lệnh ấy, Oracle thực hiện duyệt duy nhất

trên chỉ mục hoặc khóa chính để truy hỏi ROWID đơn và sau đó truy xuất bảng bằng ROWID đó

Thí dụ:

Đường dẫn truy xuất này có thể sử dụng trong câu lệnh sau trong đó cột EMPNO là khóa chính cua bang EMP: SELECT * FROM emp WHERE empno = 7900; Két suat EXPLAIN PLAN cho cau lénh nay có thé nhìn giống như sau: OPERATION OPTIONS OBJECT NAME SELECT STATEMENT

TABLE ACCESS BY ROWID EMP

INDEX UNIQUE SCAN PK_EMP

PK_EMP là tên của chỉ mục để tăng cường khóa eính

Đường dẫn 5: liên kết cụm liên kết

Đường dẫn truy xuất này có thể sử dụng cho câu lệnh liên kết các bảng trong cùng cụm liên kết nếu mệnh để WHERE của câu

lệnh có các điêu kiện bằng với mỗi cột của khóa cụm liên kết

Trang 10

biện các phép toán vòng lặp lỏng nhau, xem “Các Phép Toàn Liên Kết”)

Thí dụ:

Đường dẫn này có thể sử dụng trong câu lệnh sau, trong đó các bang EMP và DEPT được liên kết trên cột DRPTNO:

SELECT *

FROM emp, dept

WHERE emp.deptno = dept.deptno;

Kết xuất EXPLAIN PLAN cho câu lệnh này có thể nhìn giống như sau: OPERATION OPTIONS OBJECT_NAME SELECT STATEMENT NESTED LOOPS

TABLE ACCESS FULL DEPT

TABLE ACCESS CLUSTER EMP

Đường dẫn 6: khóa cụm liên kết trị số

Đường dẫn này có thể sử dụng nếu mệnh để WHERE của câu

lệnh sử dụng tất cả các cột của khóa cụm liên kết trị số trong

các điểu kiện bằng nhau Đối với khóa cụm liên kết tổng hợp, các điều kiện bằng nhau phải được kết hợp với các toán tử AND,

Để tiến hành câệnnnnh ấy, Oracle áp dụng hàm trị số của cụm liên kết vào giá trị khóa cụm liên kết trị số được xác định trong câu leneh để có được giá trị số Sau đó Oracle sử dụng giá trị số

này để thực hiện duyệt trị số trên bảng

Thí dụ:

Đường dẫn truy xuất này có thể sử dụng cho câu lệnh sau tron

Trang 11

SELECT * FROM line items WHERE orderno = 65118968; Kết xudt EXPLAIN PLAN cho cau lénh nay có thê nhìn giống nhu sau: OPERATION OPTIONS OBJECT NAME SELECT STATEMENT

TABLE ACCESS HASH LINE ITEMS

Đường dẫn 7: khóa cụm liên kết có chỉ mục

Đường dẫn truy xuất này có thê sử dụng nếu mệnh để WHERE của câu lệnh sứ dụng tất cả các cột cúa khóa cụm liên kết có chỉ

mục trong các điểu kiện bằng nhau Đối với khỏa cụm liên kết

tống hợp, các điểu ki bằng nhau phải được kết hợp với các toán tứ AND Để tiến hành câu lệnh ấy, Oracle thực hiện duyệt duy nhất trên chỉ mục cụm liên kết để truy hồi ROWIH) của một hàng với giá trị khóa cụm liên kết được xác định Sau đó Oracle sử dụng ROWID đó để truy xuất báng với duyệt cụm liên kết Vì

tất cả các hàng có cùng giá trị khóa cụm liên kết được lưu trữ với

nhau, cụm ấy có thể chỉ đòi hỏi ROWID đơn đế tìm tất cả chúng,

Thí dụ:

Đường dẫn truy xuất này có thể sử dụng trong câu lệnh sau, trong đó báng EMP được lưu trữ trong một cụm liên kết có chỉ mục và cật DEPTNO là khóa cụm liên kết:

Trang 12

SELECT STATE

TABLE ACCES CLUSTER EMP

INDEX UNIQUE SCAN PERS_INDEX ENT PERS_INDEX là tên tên của chỉ mục cụm liên kết Đường dẫn 8: chỉ mục tổng hợp

Đường dân truy xuất này có thể sử dụng nếu ménh dé WHERE của câu lệnh sử đụng tất cá các cột của chí mục tổng hợp trong

các điều kiện bằng nhau dược kết hợp với các toán tử ANI) Để

tiến hành câu lệnh ấy, Oracle thực hiện đuyệt phạm vi trên chỉ mục ấy để truy hồi các ROWII) cúa các hàng được lựa và sau đó truy xuất báng bằng các ROWID đó

Thí dụ:

Đường dẫn truy xuất này có thể sử dụng trong câu lệnh sau trong đó có một chỉ mục tổng hợp trên các cột JOB và DEPTNO: SELECT FROM emp WHERE job = ‘CLERK’ AND deptno = 30; Két xudt EXPLAIN PLAN cho câu lệnh này có thể nhìn giống như sau: OPERATION OPTIONS OBJECT_NAME SELECT STATEMENT

TABLE ACCESS BY ROWID EMP

INDEX RANGE SCAN JOB DEPTNO INDEX

Trang 13

Đường dẫn 9: các chỉ mục cột đơn

Đường dẫn truy xuất này có thể sử dụng nếu mệnh đề WHERE của câu lệnh sử dụng các cột của một hoặc nhiều chỉ mục cột đơn trong các điểu kiện bằng nhau Đối với nhiều chỉ mục cột đơn, các điều kiện phải được kết hợp với các toán tứ AND

Nếu mệnh để WHERE sử dụng cột chỉ có một chỉ mục, Oracle

tiến hành câu lệnh bằng cách thực hiện duyệt phạm vi trên chỉ

mục ấy để truy hỏi các ROWID của các hàng được lựa và sau đó

xử lý bảng bằng các ROWID này

Thí dụ:

Đường dẫn truy xuất này có thể sử dụng trong câu lệnh sau trong đó có một chỉ mục trên cột JOB của bảng EMP:

SELECT * FROM emp

WHERE job = ‘ANALYST’;

Két xudt EXPLAIN PLAN cho câu lệnh này có thể nhìn giống như sau:

‘OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENT

TABLE ACCESS * BY ROWID EMP

INDEX RANGE SCAN JOB_INDEX

JOB_INDEX 1a chi muc trén EMP.JOB

Nếu các mệnh để WHERE sử dụng các cột của nhiều chỉ mục cột

đơn, Oracle tiến hành câu lệnh ấy bằng cách thực hiện duyệt

phạm vi trên mỗi chỉ mục để truy hòi các ROWID của các hàng

thóa mãn mỗi điều kiện Sau đó Oracle hợp nhất các tập hợp của

các ROWID để có được một tập hợp của các ROWID của các hàng thỏa mãn tất cả các điều kiện Sau đó Oracle xử lý bảng sử dụng

Trang 14

Oracle c6 thé hop nhat toi da 5 ci muc Néu ménh dé WHERE sử dụng các cột của hơn ã chỉ mục cột đơn, thì Oracle hợp nhất 5 chi mục của chung, truy xuất bảng bằng ROWID và sau đó kiểm tra các hàng kết quả để xác định xem chúng có thóa mãn các điều kiện còn lại trước khi cho chúng trở lại

Thí dụ:

Đường dẫn truy xuất này có thể sử dụng trong câu lệnh sau trong đó có các chỉ mục trên cá hai cột JOB và DEPTNO của báng EMP: SELECT * FROM emp WHERE job = ‘ANALYST’ AND deptno = 20; Kết xuất EXPLAIN PLAN cho céénnnoh nay có thể nhìn giống như sau: OPERATION OPTIONS OBJECT_NAME SELECT STATEMENT TABLE ACCESS BY ROWID EMP AND-EQUAL

INDEX RANGE SCAN JOB_INDEX

INDEX RANGE SCAN DEPTNO INDEX

Phép toán AND-EQUAL hợp nhất cdc ROWID có được bằng cách duyệt JOB INDEX và DEPTNO INDEX cho kết quả trong một tập hợp các ROWID của các hàng thỏa man truy vấn ấy

Đường dẫn 10: tìm phạm vị có biên trên các cột có chỉ mục Đường dẫn truy xuất này có thể sử dụng nếu mệnh để WHERE

của câu lệnh có điều kiện sử dụng cột của chỉ mục cột đơn hoặc

Trang 15

column = expr

column >[=] expr AND column <{=] expr column BETWEEN expr AND expr column LIKE ‘c%’

Mỗi diéu kién nay ấn định một phạm vi biên của những chỉ mục

được câu lệnh ấy xử lý Phạm vi được coi là biên vì các điều kiện ấn định cả giá trị nhỏ nhất và lớn nhất của nó Để tiến hành một câu lệnh như thế, Oracle thực hiện duyệt phạm vi trên chí mục và sau đó xử lý bảng bằng ROWID

Đường dẫn truy xuất không thể sử dụng nếu biểu thức expr tham

chiếu cột có chí mục Thí dụ:

Đường dẫn truy xuất này có thể sử dụng trong câu lệnh này, trong.đó có một cập nhật trên cột SAL của bảng EMP:

SELECT *

FROM emp

WHERE sal BETWEEN 2000 AND 3000,

Kết xuất EXPLAIN PLAN cho cau lệnh này có thể nhìn giống như sau:

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENT

TABLE ACCESS BY ROWID EMP

INDEX RANGE SCAN = SAL_INDEX

Trang 16

Thi du:

Đường dẫn truy xuất này còn có thể sử dựng trong câu lệnh sau, trong có một chí mục trên cột ENAME cua bang EMP:

SELECT * FROM emp

WHERE ename LIKE ‘S%’;

Đường dẫn 11: tìm phạm ví không có biên trên các cột có chỉ

mục

Đường dẫn truy xuất này có thể sử dụng nếu mệnh đẻ WHERE

của câu lệnh có một trong những điểu kiện sau sử dụng cột của chỉ mục cột đơn hoặc một hoặc nhiều cột của phần đầu của chỉ mục tống hợp:

WHERE column >[=] expr WHERE column <(=] expr

Méi diéu kién nay an định một phạm vi không có biên của những giá trị chỉ mục được câu lệnh truy xuất Phạm vi được coi là không có biên vì điều kiện ấn định giá trị nhỏ nhất ro lớn nhất của nó, nhưng không phải cả hai Để tiến hành một câu lệnh như thế, Oracle tiến hành một duyệt phạm trên chỉ mục và sau đó truy xuất bảng bằng ROWID

Thí dụ:

Đường dẫn truy xuất này có thể sử dụng trong câu lệnh sau,

Trang 17

TABLE ACCESS BY ROWID EMP

INDEX RANGE SCAN SAL_INDEX

Thi du:

Đường dân truy xuất này có thê sử đụng trong câu lệnh sâu, trong đó có một chỉ mục tổng hợp trên các cột ORDER và LINE

cia bang LINE_ITEMS: SELECT *

FROM line_items

WHERE order > 65118968;

Đường dẫn truy xuất có thể sứ dụng vì mệnh đề WHERE sứ dụng cot ORDER, phan đầu của cm

Thí dụ:

Đường dẫn truy xuất này không thể sứ dụng trong câu lệnh sau, trong đó có một chỉ mục trên các cộệt ORDER va LINE:

SELECT *

FROM line_items WHERE line < 4;

Đường dẫn truy xuất ấy không thể sử dụng vì mệnh đề WHERE chỉ sử dụng cột LINE, không phải là phần đầu cúa chỉ mục

Đường dẫn 12: liên kết sắp xếp - hựp nhất

Trang 18

cầu lệnh liên kết (Đề có thêm thông tin về các phép tốn nay, xem *Tối LÍu Hóa Các Câu Lệnh Liên Kết.)

Thí dụ:

Đường dẫn truy xuất này có thể sử dụng cho câu lệnh sau trong dso cdc bang EMP va DEPT không được lưu trữ trong cùng cụm

liên kết: SELECT *

FROM emp, dept

WHERE emp.depino = dept.deptno;

Ket xuat EXPLAIN PLAN cho cau lệnh này có thế nhìn giếng như sau: OPERATION OPTIONS OBJECT_NAME SELECT STATEMENT MERGE JOIN SORT JOIN TABLE ACCESS FULL EMP SORT JOIN

TABLE ACCESS FULL DEPT

Đường dẫn 13: cột cá chỉ mục MAX hoặc MỊN

Đường dẫn này có thể sử dụng cho câu lệnh SELECT khi tất cá các điều kiện đều đúng:

Truy vấn sử dụng bàm MAX hoặc MIN để lựa giá trị cực đại và cực tiểu của cột có chí mục cột đơn hoặc cột đầu có chỉ mục tổng hợp, Chỉ mục không thể là một chỉ mục cụm liên kết, Đôi số đôi

với hạm MAX hoặc MIN có thể là một biểu thức bất kỳ liên quan đến cột, hằng số hoặc toán tử cộng (+), phép tốn ghép (! Ì) hoặc ham CONCAT

Khong có các biểu thức trong danh sách lựa

Trang 19

Để tiến hành truy vấn ấy, Oracle thực hiện duyệt pham vị của

chỉ mục để tìm giá trị có chi muục cực đại và cực tiếp Vì chí giá trị này được lựa, Oracle không cần truy xuất bảng sau khi duyệt chỉ mục ấy

Thí dụ:

Đường dẫn truy xuất này có thể sử dụng cho câu lệnh sau, trong đó có một chỉ mục trên cột SAL cua bang EMP:

SELECT MAX(sal) FROM emp;

Két xudt EXPLAIN PLAN cho cau lénh này có thể nhìn giống như sau: OPERATION OPTIONS OBJECT_NAME SELECT STATEMENT AGGREGATE GROUP BY INDEX RANGE SCAN SAL INDEX

Đường dẫn 14: ORDER BY trên cột có chỉ mục

Đường dẫn truy xuất này có thể sử dụng cho câu lệnh SELECT khi tất cá các câu lệnh đều đúng:

Truy vấn có mệnh để ORDER BY sứ dụng cột có chí mục cột đơn hoặc phần đẩu của chỉ mục tổng hợp Chỉ mục không thể là một chí mục cụm liên kết

Phải có hạn định tính nguyên vẹn là PRIMARY KEY hoặc NOT NULL dé bdo dam ít nhất một trong các cột có chỉ mục được liệt kê trong mệnh để ORDER BY có các giá trị rồng

Tham sé NLS SORT duoc xac lap la BINARY

Trang 20

Thi du:

Đường dẫn truy xuất có thể sử dụng cho câu lệnh sau, trong đó

có một phím chính trên cột EMPNO của bảng EMP: SELECT * FROM emp ORDER BY empno; Rết xuất EXPLAIN PLAN cho cau lénh này có thể nhìn giống như sau: OPERATION OPTIONS OBJECT NAME SELECT STATEMENT

TABLE ACCESS BY ROWID EMP

INDEX RANGE SCAN PK_EMP

PR_EMP là tên của chỉ mục tăng cường khóa chính Khóa chính bảo đảm cột ấy không có các giá trị rỗng

Đường dẫn 15: duyệt toàn bộ bắng

Đường dẫn truy xuất này có thể sử dụng cho câu lệnh SQL bất,

kỳ, bất kể các điều kiện của mệnh để WHERE

Trang 21

bat ke xem cot cé chi muc hay khong expr = expr2

trong đó expr là một biểu thức điều tác trên cột với một toán tử hoặc một hàm, bất kế cột có chí mục hay khong

Truy vấn con NOT EXISTS

Cot gia ROWNUM trong khung nhìn

Điều kiện bất kỳ liên quan đến một cột không có chỉ mục,

Cau lénh SQL bat ky chi co các câu trúc và các câu lệnh khác làm cho các đường dẫn m khả dụng phải sử dụng duyệt toàn bộ bảng Thí dụ: Câu lệnh này sử dụng duyệt toàn bộ bảng đề truy xuất bang EMP: SELECT * FROM emp; Két xudt EXPLAIN PLAN cho câu lệnh này có thể nhìn giống như sau: OPERATION OPTIONS OBJECT_NAME STATEMENT TABLE ACCESS FULL EMP

Chon giữa các đường dẫn

Phần này mô tả bộ tôi da hóa chọn giữa các đường dan kha dung như thế nào:

Trang 22

Chọn giữa các đường dẫn truy xuất với cách giải quyết dựa

trên phí tổn

Với cách giải quyết đựa trên phí tốn, bệ tối ưu hóa chọn một

đường dựa trên các yếu tổ sau:

các đường dẫn truy xuất khá dụng cho câu lệnh

phí tổn dự đoán tiến hành câu lệnh sử dụng mỗi đường dẫn trùy

xuất hoặc tổ hợp của các đường dẫn

Để chọn một đường dẫn truy xuất, bộ tối ưu hóa trước hết xác định những đường dẫn truy xuất nào có thể sử dụng bằng cách khảo sát các điều kiên trong mệnh đẻ WHERE của câu lệnh Sau đó bộ tối ưu hóa phát sinh một tập hợp các kế hoạch tiến hành khá dụng và dự toán phi tốn của mỗi kế hoạch sử dụng những thống kê cho chỉ mục, các cột và các bảng truy xuất câu lệnh ấy Sau đó bộ tối ưu hóa chọn kế hoạch tiến hành với phí tổn dự đoán thấp nhất

Sự chọn lựa của bộ tối ưu hóa giữa các đường dẫn truy xuất khả dụng có thể được chạy đè bằng các gợi ý

Thông tin bổ sung;

Xem Oraele8 Tuning về các gợi ý trong những câu lệnh

SQL

Để chọn giữa các đường đẫn truy xuất khả dụng, bộ tối ưu hóa

xét các yếu tố sau:

Selectivity: tinh chon loc la sé phan tram các hàng trong bang mà truy vấn lựa Một truy vấn lựa một sô phân trăm nhỏ các hàng của bảng có tính chọn lọc tốt, trong khi truy vấn lựa số phần trăm lớn các hàng có tỉnh chọn lọc kém

Bộ tối ưu hóa có thể chọn lựa đuyệt chỉ mục so với duyệt toàn bộ bảng đối với một truy vấn có tính chọn lọc tốt

hơn đối với một truy vấn có tĩnh chọn lọc kém Duyệt chỉ

mục thường hiệu quá hơn duyệt toàn bộ bảng đối với các

Trang 23

báng trong khi duyệt toàn bộ bảng thường nhanh hơn đối với những truy vấn truy xuất số phần trăm lớn hơn Để xác định tính chọn lọc của một truy vấn, bộ tối ưu hóa xét các nguồn thông tin sau:

Các toán tử được sử dụng trong mệnh để WHERE

Các cột có khóa duy nhất và khóa chính được sử dụng trong mệnh đề WHERE

Những thống kê cho bảng

Các thí dụ sau minh họa bộ tối ưu hóa sử dụng tính chọn

lọc như thế nào

DB_FILE_MULTIBLOCK READ_COUNT: duyệt toàn bộ bảng sử

dụng đọc dữ liệu đồng thời, vì vậy phí tổn của duyệt toàn bộ

bảng phụ thuộc vào số lần đọc đữ liệu đồng thời cần thiết để đọc toàn bộ bảng, phụ thuộc vào số khối được đọc bằng đa khối đơn,

được ấn định bằng tham số khởi hoạt

DB_FILE_MULTIBLOCK_READ_COUNT Vì lý do này, bộ tối ưu hóa rất có thể chọn duyệt toàn bộ bảng khi giá trị của tham số này cao

Thí dụ:

Xét truy vấn sau sử dụng một điều kiện bằng nhau trong mệnh

đê WHERE của nó để lựa tất cả các nhân viên có tên Jackson:

SELECT * FROM emp

WHERE ename = ‘JACKSON’;

Trang 24

Thi du:

Xét lại truy vấn trong thí dụ trước Nếu cột ENAME không phải là khóa duy nhất hoặc khóa chính; bộ tối ưu hóa có thể sử dụng các thống kê này để dự đoán tính chọn lọc của truy vấn ấy: USER TAB_COLUMNS.NUM DISTINCT là số giá trị cho mỗi cột trong bảng

USER_TABLES.NUM_ROWS là số hàng trong mỗi bảng

Bang cach chia sé hang trong bang EMP cho so gia trị riêng biệt

trong cột ENAME, bộ tối ưu hóa dự đoán số phần trăm nhân viên có cùng tên Bằng cách giả sử những giá trị ENAME được

phân phối đẳng nhất, thì bộ thuộc tính sử dụng số phần trăm

này làm tính chọn lọc dự đoán của truy vấn Thí dụ: Xét truy vấn sau lựa tất cả những nhân viên với số ID của nhân viên nhỏ hơn 7500: SELECT * FROM emp WHERE empno < 7500;

Để dự đoán tinh chon lọc của truy vấn, bộ tối ưu hóa sử dụng giá tri bién 7500 trong điều kiện mệnh để WHERE và các giá trị thống kê HIGH_ VALUE và LOW_VALUE cho cột EMPNO nễu có thể được Các thống kê này có thể được tìm thấy trong khung nhìn USER_TAB_COLUMNS Bộ tối ưu hóa giả sử là các giá trị

EMPNO dược phân phối đổng đều trong phạm vi giữa giá trị

thấp nhất và cao nhất, thì bộ tối ưu hóa xác định số phan tram nào của phạm vi này nhỏ hơn giá trị 7500 và sử dụng giá trị này làm tính chọn lọc dự đoán của truy vấn

Thi du:

Xét truy vấn sau sử dụng biến kết gán thay vi giá trị trực kiện cho giá trị biên trong điều kiện mệnh để WHERE:

Trang 25

FROM emp

WHERE empno < :el;

Bộ tối ưu hóa không biết giá trị cua biến kết gảu E1 Thực ra,

giá trị cúa E1 không thể khác nhau đối với mỗi tiến hãnh truy vấn Vì lý do này, bộ tối ưu hóa không thể sử dụng các phương tiện được mô tả ở thí dụ trước để xác định tính chọn lọc của truy vấn này Trong trường hợp này, bọ tối ưu hóa dự đoán bằng cách suy nghiệm giá trị nhỏ đối với tính chọn lọc của cột (vì nó có chỉ mục) Bộ tối ưu hóa tạo ra sự thừa nhận này bất kỳ khi nào biến kết gần được sử dụng làm giá trị biên trong điều kiện với một trong các toán tỬ <, >, <=, or >=

Xử lý của bộ tối ưu hóa của các biến kết gán có thể tạo cho nó chóu các kế hoạch tiến hành khác nhau cho các câu lệnh SQL chỉ khác nhau về sứ dụng các biến kế gán thay vì các hằng Trong một trường hợp sự khác nhau này có thể rất rò ràng, bộ tối ưu hóa có thể chọn các kế hoạch tiến hành cho một câu lệnh 8QL nhúng với một biến kết gán trong chương trình Oraele Precempiler và cùng câu lệnh SQL với hằng trong SQL*Plus

Thí dụ:

Xét truy vấn sau sử dụng các biến kết gán làm những giá trị biên trong điều kiện với toán tử BETWEEN:

SELECT * FROM einp

WHERE empno BETWEEN :low e AND :high e;

Bộ tối ưu hóa phân tích điểu kiên BETWEEN thành hai điều kiện sau: empno >= :low.e empno = high e

Bộ tôi ưu hóa dự đoán bằng cách suy nghiệm một tính chọn lọc

Trang 26

Thí dụ:

Xét truy vấn sau sử dụng toán tử BETWEEN đề lựa tất cá những nhân viên có số ID từ 7500 tới 7800:

SELECT * FROM emp

WHERE empno BETWEEN 7500 AND 7800;

Để xác định tính chọn lọc của truy vấn sau, bộ tối du hóa phân

tích điều kiện mệnh đề WHERE thành bai điều khiển sau: empno >= 7500

empno <= 7800

Bà tối ưu hóa đự đoán tính chọn lọc cá biệt của mỗi diéu kiện sứ dụng phương tiện được mô tả ở thí dụ trước Sau đó bộ tối ưu hóa sử dụng các chọn lọc này (S1 và S2) và hàm giá trị tuyệt đối (ABS) trong công thức sau để dự đoán tính chọn lọc (8) của điều kiện BETWEEN:

5= AB8( S1 +82 - 1)

Chọn lựa giữa cáđđường dẫn truy xuất với cách giải quyết

dựa trên nguyên tắc

Với cách giải quyết dự trên nguyên tắc bộ tối ưu hóa chọn xem sử dụng đường dẫn truy xuất nào dựa trên các yếu tố sau:

các đường dẫn truy xuất khả dụng cho câu lệnh

các cấp của các đường dẫn truy xuất trong báng 20-1 “Các Đường Dẫn Truy Xuất”

Để chọn một đường dẫn truy xuất, trước hết bộ tối ưu hóa khảo sát các điều kiện trong mệnh đề WHERE của câu lệnh để xác

đỉnh các đường dẫn nào có thể sử dụng Sau đó bộ tối ưu hóa

chọn đường dẫn khá dụng có cấp cao nhất

Lưu ý duyệt toàn bộ bảng là đường truy xuất có cấp thấp nhất

Trang 27

nguyên tắc luôn luôn chọn một đương dân truy xuất sử dụng chì mục nếu đường dân có thể sử dụng đù duyệt toàn bó bảng có thể

tiến hành nhanh

Thứ tự của các điều kiện trong mệnh để WHERE thường không tác động đến sự chọn lựa cúa bộ tối ưu hóa giữa các đường dẫn truy xuất

Thí dụ:

Xét câu lệnh SQL này lựa số nhân viên của tất cả những nhân viên trong bảng EMP với giá trị ENAME của CHŨNG và với giá trị SAL lớn hon 2000: SELECT empno FROM emp WHERE ename = ‘CHUNG’ AND sal > 2000; Cũng xét bảng BMP có các hạn định tính nguyên vẹn va các chỉ mục: €ó một hạn định PRIMARY KEY trên cột EMPNO được tầng cường bằng chỉ mục PK_EMPNO

Có một chi mục có tên ENAME_IND trên cột ENAME Có một chỉ mục có tên SAL _TND trên cột SAL

Dựa trên các điểu kiện trong mệnh để WHERE của câu lệnh §QL, các hạn định tính nguyên vẹn và các chí mục, các đường dẫn này có thể sử dụng:

Đường dân truy xuất chỉ mục cột đơn sử dụng chỉ mục

ENAME IND cé thé được thực hiện bằng điều kiện ENAME =

‘CHUNG’ Đường dẫn truy xuất này có cấp 9

Một cấp có biên sử dụng chi muc SAL_IND có thể được thực hiện

Trang 28

Litu y chi muc PK_EMPNO khéng tao hang aun bang dutng dẫn truy xuất khóa chính được vì cột có chì mục không xuất hiện trong điều kiện của mệnh đề WHERE

Sử dụng các giải quyết dựa trên nguyên tắc, bộ tối ri hóa chọn đường dẫn truy xuất sử dụng chí mục ENAME_TND để tiến hành câu lệnh này Bộ tối ưu höa chọn đường dẫn này vì nó có thể là đường dẫn có cấp cao nhất

Tối ưu hóa các câu lệnh liên kết

Để chọn kế hoạch tiến hành cho câu lệnh liên kết, bộ tối ưu hóa phải đưa ra các quyết định tương quan sau:

Vì dịch vụ các câu lệnh đơn, bộ tối ưu hóa

phải chọn một đường dẫn truy xuất để truy hồi dữ liệu từ mỗi bảng trong câu lệnh liên

kết Xem “Chọn Các Đường Dan Truy Xuất”)

Để liên kết mỗi cặp nguôn hang, Oracle

phải thực hiện một trong các phép toán

sau:

Các phép toán Các vòng lắp lông nhau liên kết Sắp xếp-hợp nhất

Cụm liên kết

Liên kết trị số (không thể sử dụng với tối

ưu hóa dựa trên nguyên tắc)

Để tiến hành một câu lệnh liên kết hơn

hai báng, Oracle liên kết hai trong các

bảng và sau đó liên kết nguồn hàng kết quả với bảng kế tiếp Tiến trình này được tiếp tục cho tới khi tất cả các bảng được

Trang 29

Các phép toán liên kết

Bộ tối tì hóa có thể sử dụng các phép toán sau để liên kết hai

nguồn hàng:

Liên ket các vòng lặp lỗng nhau Lien ké1 sap xép-hgp nhat

Liên kết trị số

Liên kết các vòng lặp lỗng nhau

Để thực hiện liên kết các vòng lặp lông nhau, Oracle thực hiện các bước sau:

Bộ tôi ưu hóa chọn một trong các bảng lâm bảng bên ngoài

hoặc bảng điều khiến Bảng khác được gọi là bảng bên trong

Đôi với mỗi hàng trong báng bên ngoài, Oracle tìm tất cd các hàng trong bảng bên trong thỏa mãn điều kiện liên kết

Oracle kết hợp đữ liệu trong mỗi cập hàng thỏa mãn điểu

kiện liên kết và cho trở lại các hàng kết quả

Hình 20-11 trình bày kế hoạch tiến hành cho câu lệnh sau sử

dụng liên kết vòng lặp lông nhau::

SELECT ?

FROM emp, dept

WHERE emp.deptno = dept.deptno;

Để tiên hành câu lệnh này, Oracle thực hiện các bước sau: Step 2 truy xuất bảng bên ngoài (EMP) bằng duyệt toàn bộ bảng Đối với mỗi hàng cho Step 3 Step 4 cho trở lại sử dụng giá trị EMP.DEPTNO để thực hiên duyệt duy nhất trên chỉ mục

Trang 30

Hình 20-11 Liên kết các oòng lap léng nhau 1 CVONG LAP LONG NHAU TRUY XUẤT BẢNG (THEO ROWID: kh ste Stele (DUYET DUY NHAT) Do) Step 3 sử dụng ROWID từ Step 4 để định vị hàng so khớp trong bảng bén trong (DEPT)

Trang 31

Liên kết sắp xếp-hợp nhất

Oracle chỉ có thể thực hiện liên kết sắp xếp-hợp nhất cho một liên kết tương đương Để thực hiện liên kết sắp xêp-hợp nhất,

Oracle thực hiện các bước sau:

Oracle sắp xếp mỗi nguồn hàng được liên kết nếu chúng

không được sắp xếp bằng điều hoạt trước Các hàng được

sắp xếp trên các giá trị của các cột được sử dụng trong điều kiện liên kết

Oracle hợp nhất hai nguồn để mỗi cặp hàng, mỗi hàng từ mỗi nguồn có các giá trị so khớp cho các cột được sử dụng trong điều kiện liên kết được kết hợp và được cho trở lại

bằng nguéng hàng kết quả

Hình 20-12 trình bày câu lệnh sau sử dụng liên kết sắp xếp-hợp

nhất:

SELECT *

FROM emp, dept

WHERE emp.deptno = dept.deptno;

Để tiến hành câu lệnh này, Oracle thực hiện các bước sau:

Cac Step 3 và õ thực hiện duyệt toàn bộ bảng cua cdc bang EMP và DEPT

Ñteps 2 và 4 sắp xếp'mỗi nguồn hàng tách riêng

Step 1 hợp nhất các nguồn từ các Step 2 và 4 với nhau kết hợp mỗi hàng từ Step 2 với mỗi hàng so khớp từ Step 4 và cho trở lại

nguồn hàng kết quá Liên kết cụm liên kết

Oracle có thể chỉ thực hiện cụm liên kết cho liên kết tương đương cân bàng các cột khóa cụm liên kết của bai báng trong cùng cụm liên kết Trong cụm liên kết, các hàng từ hai bảng cùng các giá trị khóa cụm liên kết được lưu trữ trong cùng các

Trang 32

Hình 20-12 Liên kết sắp xếp-hợp nhất LIÊN KẾT HỢP NHẤT SẮP XẾP SẮP XẾP (LIÊN KẾT) (LIÊN KẾT) TRUY XUAT BANG “HOÃN TOẠN: cen

Thông tin bổ sung:

Trang 33

Hình 20-13 trình bàyy kẻ hoạch tiến hành cho câu lệnh sau,

trong đó các bảng EMP và DEPT được lưu trừ cũng với nhau trong cùng cụm liên két:

SELECT *

FROM emp, dept

WHERE emp.deptno = dept.deptno; Hình 20-13 Liên kết cụm liên kết CAC VONG LAP LONG NHAU TRUY AT BANG ctor TOÀN: CUM LIEN KET) đept cu)

Để tiến hành câu lệnh này, Oracle thực hiện các bước sau: Step 2 truy xuất bảng bên ngoài (DEPT) với duyệt toàn bộ bằng, Đối với môi hàng được Step 2, Step 3 cho trd lai su dung gia tri DEPT.DEPTNO dé tim cac hang so khép trong bang bén trong (EMP) voi duyét cum lién kết

Trang 34

nhau trong cum lién két Vi méi hang tu bang DEPT duge liu triv trong cùng các khối dự liệu bằng các hàng so khớp trong bing EMP, Oracle có thê truy xuât các hàng so khớp một cách hiệu quả nhất

Liên kết trị sế

Oracle chỉ có thể thực hiện liên kết trị số cho một liên kết tương đương Liên kết trị số không thế sử dụng với tối ưu hóa dựa trên nguyên tấc Bạa phải cho phép tối ưu hóa liên kết trị số, bằng cách sử dụng tham số khởi hoạt HASH JOIN_ENABLED (có thé được xác lập với lệnh AUTER SESSION) hoặc gợi ý USE_HASH

Để thực biện một liên kết trị số, Oracle thực hiện các bước sau:

Oracle thực hiện duyệt toàn bộ bảng trên mỗi bảng và tác thành tối đa các phân hoạch có thể dựa trên bộ nhớ có thể sử dụng

Oracle thiết lập bảng trị số từ một trong các phân hoạch (nếu có thể, Oracle sẽ lựa phân hoạch thích hợp với bộ nhớ có thể sử dụng) Sau đó Oracle sử dụng phân hoạch tương ứng trong bảng khác đê thăm dò bảng trị số Tất cả các cặp phân hoạch không

thích hợp với bộ nhớ được đưa vào đĩa

Đối với mỗi cặp phân hoạch (mỗi phân hoạch từ mỗi bảng), Oracle sử dụng phân hoạch nhỏ hơn để thiết lập bảng trị

số và phân hoạch ]ớn hơn để tham dd bang tri sé

Hình 20-14 trình bày kế hoạch tiến hãnh cho câu lệnh sau sử dụng liên kết trị số:

SELECT *

FROM emp, dept

Trang 35

Hình 20-14 Liên kết trị số KẾT HỢP TRỊ SỐ Suite ten wen ¡"mộ 5u a ya emu

Để tiến hành câu lệnh này, Oracle thực hiện các bước sau:

Các Step 2 và 3 thực hiện duyệt toàn bộ bảng của các bảng EMP và DEPT

Step 1 thiết lập một bảng trị số ngoài các hàng phát xuất từ

Step 2 và thăm dò nó với mỗi hàng phát xuất từ Step 3

Tham số khởi hoạt HASH_AREA_SIZE điều khiển dùng lượng bộ

nhớ được sử dụng cho điều hoạt liên kết trị số và tham số khởi

hoạt HASH_MULTIBLOCK_IO_COUNT điều khiển số khối mà điều hoạt liên kết trị số sẽ đọc và ghi đồng thời

Thông tin bổ sung:

Trang 36

Chọn các kế hoạch tiến hành cho các câu lệnh liên kết

Phan này mô tả bộ tối tu hóa chọn kế hoạch tiến hành cho câu

lệnh liên kết như thế nào:

khi sử dụng cách giải quyết dựa trên phí tổn

khi sử dụng cách giải quyết đựa trên nguyên tẮc

Luu ý các nhận xét này áp chung vào các cách giải quyết dựa

trên phí tốn và nguyên tắc:

Trước hết bộ tối ưu hóa xác định xem liên kết hai hoặc nhiều

bảng có kết quả rõ ràng từ nguồn hàng có tối đa một hàng Bộ tốt ưu hóa nhận biết các trường hợp như thé dựa trên các hạn

định UNIQUE và PRIMARY KEY trên các bảng Nếu một trường hợp như thế tổn tại, thì trước hết bộ tối ưu hóa đưa các bảng nay theo thứ tự liên kết Sau đó bộ tối ưu hóa liên kết của tập hợp các bảng còn lại

Đối với các câu lệnh liên kết có các điều kiện liên kết bên ngoài, bảng có toán tử liên kết bên ngoài phải xảy ra sau khi bảng khác trong điểu kiện theo thứ tự liên kết Bộ tối ưu hóa không xét các thứ tự xâm phạm nguyên tắc này

Chọn các kế hoạch tiến hành cho các liên kết với cách giải

quyết dựa trên phí tổn

Với cách giải quyết dựa trên phí tổn, bộ tối ưu hóa phát sinh tập hợp các kế hoạch tiến hành theo thứ tự liên kết có thể, các điều hoạt liên kết và các đường dẫn truy xuất có thể sử dụng Sau đó

bộ tối ưu hóa dự toán phí tổn của mỗi kế hoạch và chọn một kế

hoạch có phí tổn thấp nhất Bộ tối ưu hóa dự đoán các phí tổn này bằng các cách sau:

Phí tổn của phép toán các vòng lặp lồng nhau dựa trên phí tổn

đọc mỗi hàng được lựa của bảng bên ngoài và mỗi hàng so khớp bảng bên trong của nó vào bộ nhớ Bộ tối ưu hóa dự đoán các phí

tổn này bàng cách sử dụng thống kê trong từ điển đữ liệu

Phí tổn của liên kết sấp xếp-hợp nhất dựa trên mức độ lớn vẻ

Trang 37

Bộ tôi ưu hỏa cùng xét các yêu tỏ khác khi xác định phi tổn của

mới điều hoạt, Thì dụ:

Kích thước vùng sắp xép nhỏ hơn có thê làm tang phí tốn cho liên kết sắp xêp-hợp nhất vì sắp xếp sử dụng nhiều thời gian của CPU! và L/O trong vùng sấp xếp nhỏ hơn

Kích thước vùng sắp xếp được ẩn định bàng tham số khởi

hoat SORT_AREA_ SIZE

Đếm số lần đọc dữ liệu đồng thời lớn hơn có thê làm giảm

phí tốn cho liên kết sắp xếp-hợp nhất liên quan đến các liên kết vòng lập lổng nhau Nếu một số lớn các khối liên

tiếp có thế được đọc từ đĩa bằng J/O đơn, một chỉ mục

trên bảng bên trong cho liên kết các vòng lặp lông nhau ít có thể làm tăng hiệu suất so với duyệt toàn bộ bảng Đếm số lần đọc dữ liệu đồng thời được ấn định bằng

tham số khới hoạt

DB_FILE_MULTIBLOCK READ COUNT,

Đối với các câu lệnh với các điều kiện liên kết khác, bảng với toán tử liên kết phải xảy ra sau khi bảng khác trong điều kiện theo thứ tự liên kết Bộ tối ưu hóa không xét các thứ tự liên kết xâm phạm nguyên tắc này

Với cách giải quyết dựa trên phí tổn, sự chọn lựa của bộ tối ưu

hoa của các thứ tự liên kết có thể được ghỉ đè với gợi ý ORDERED Nếu gợi ý ORDERED ấn định thứ tự liên kết xâm

phạm nguyên tắc đối với liên kết bên ngồi, bộ tơi ưu hóa bỏ quá gợi ý và chọn thứ tự ấy Bạn còn có thể chạy đè chọn lựa của bộ

tối ưu hóa về các điều hoạt có các gợi ý

Thông tín bổ sưng:

Trang 38

Chụn các kế hoạch tiến h cho các liên kết với cách giải quyết dựa trên nguyên tắc

Với cách giải quyết dựa trên nguyên tắc bộ tôi ưu hóa thực hiện các bước sau để chọn một kế hoạch tiến hành cho cáu lệnh liên kết các bảng R:

Bo téi wu héa phát sinh tập hợp những thứ tự liên kết R, mỗi liên kết với báng khác nhau là bảng thứ nhất, Bọ tối ưu hóa phát sinh mỗi thứ tự liên két tiém nang sử dụng thuật toán

sau:

Điền mỗi vị trí theo thứ tự liên kết, bộ tối ưu hóa chọn báng

có đường dẫn truy xuất có thể sứ dụng có cấp cao nhất theo các cấp cho các đường dẫn truy xuât ở Bảng 20-1 “Các Đường Dân Truy Xuất” Bộ tối ưu hóa lặp lại bước này để điển mỗi vị trí tiếp theo theo thứ tự liên kết

Đối với mỗi bảng theo thứ tự liên kết, bộ tối ưu hóa còn chọn điểu hoạt để liên kết bảng với bảng trước hoặc nguồn hàng theo thứ tự Bộ tối ưu hóa thực hiện điều này bằng cách "lập cấp” điều hoạt sắp xếp-hợp nhất bằng đường dẫn 12 và áp

dụng những nguyên tắc sau:

Nếu đường dẫn truy xuất đối với báng được chọn có cấp 11

hoặc hơn, thì bộ tối ưu hóa chọn điểu hoạt vòng lặp lỏng nhau sử đụng bảng trước hoặc nguồn hàng theo thứ tự liên kết bang bang bên ngoà

Nếu đường dẫn truy xuất đối với bảng có cấp thấp hơn 12 và có điểu kiện liên kết tương đương giữa bảng được chọn và bảng trước hoặc nguôn hàng theo thư tự liên kết, thì bộ tối uu hóa chọn phép toán sắp xếp-hợp nhật

Nếu đường dân truy xuất đôi với bảng được chọn có cấp thấp

hơn 12 và không có điều kiện liên kết tương đương, thì bộ tôi ưu hóa chọn phép toán vòng lập lỗng nhau với bảng trước hoặc nguồn hàng theo thứ tự liên kết bằng bảng bên ngoài

Sau đó bộ tối ưu hóa chọn giữa tập hợp két quả của các kẻ

hoạch tiên hành Mục đích chọn lựa của bọ tôi ưu hóa là đè tũng tôi đa số phép toán liên kết vòng lap lông nhau, trong

Trang 39

Đối với một khung nhìn ở bên phải của liên kết bên ngoài, bộ tối do bing bên trong được truy xuất sử dụng duyệt chỉ mục Vì liên kết vòng lặp lông nhau liên quan đến truy xuất bảng bên trong nhiều lần, chỉ mục trên bảng bên rong có thể tăng hiệu suất của liên kết vòng lặp lồng nhau rất nhiều

"Thường bộ tối uu hóa không xét thứ tự các bảng xuất hiện trong ménh dé FROM khi chọn kế hoạch tiến hành Bộ tối ưu hóa thực hiện chọn lựa này bằng cách áp dụng

những nguyên tắc theo thứ tự sau:

Bộ tối ưu hóa chọn kế hoạch tiến hành với các phép toán vòng lặp lỗng nhau ít nhất, trong đó in bảng Lên trong được truy xuất với duyệt toàn bảng

Nếu có một liên kết, thì bộ tối ưu hóa chọn kế h2a-a tiến

hành với các phép toán sắn xếp-hợp nhất

Nếu vẫn còn liên kết, bộ tôi ưu hóa chọn kế l oạch hành để bảng thứ nhất theo thứ tự liên kết có đường dẫn truy xuất có cấp cao nhất:

Nêu có liên kết trong phiểu kế hoạch có các bảng thứ nhất được Xem thêm bằng đường dẫn truy xuất các chỉ mục cột đơn, thì bộ tối ưu bóa chọn kế hoạch có bảng thứ nhất được truy xuất với các chỉ mục hợp nhất nhiều nhất

Nếu có liên kết giữa nhiều kế hoạch có các bảng thứ nhất được truy xuất bằng duyệt phạm vi có biên, thì bộ tối ưu

hóa chọn kế hoạch có bảng thứ nhất được truy xuất với số cao nhất của các cột đầu của chí mục tổng hợp

Nếu vẫn có liên kết, bộ tối ưu hóa chọn kế hoạch tiến hành cho bảng thứ nhất: xuất hiện trong mệnh đề FROM của truy vấn sau

Các khung nhìn trong những liên kết bên ngoài

ưu hóa có thể sứ dụng một trong hai phương pháp, tùy theo bao nhiêu bảng cơ sở mà khung nhìn đó truy xuất:

Trang 40

Nếu khung nhìn có nhiều báng cơ sở, thì bộ tối ưu hóa đẩy tối ưu hóa liên kết vào khung nhìn đó

Hợp nhất khung nhìn có bảng cơ sở đơn

Rhung nhìn có bảng cơ sở đơn và ở bên phải của liên kết bên ngoài được hợp nhất vào khối truy vấn của câu lệnh truy xuất (Xem “Hợp Nhất Truy Vấn Của Khung Nhìn Vào Câu Lệnh”

Hợp nhất khung nhìn có thể xảy ra dù một biểu thứcc trong

khung nhìn có thể cho trở lại giá trị không rỗng dịch vụ một NULL

Thi du:

Xét khung nhìn NAME_VIEW, tập kết các tên gọi và họ từ bảng EMP:

CREATE VIEW name_view

AS SELECT emp-firstname ! |! emp.lastname AS emp fullname, emp.deptno

FROM emp;

và xét câu lệnh liên kết bên ngoài để tìm các tên của tất cả nhân viên ở London và các bộ phận của chọn, cũng như bộ phận bất kỳ không có nhân viên:

SELECT dept.deptno, name_view.emp_fullname FROM emp_fullname, dept

WHERE dept.deptno = name_view.deptno(+) AND dept.deptloc = ‘London’;

Bộ tối ưu hóa hợp nhất truy vấn của khung nhìn vào câu lệnh

liên kết bên ngoài Câu lệnh kết quả nhìn giống như sau:

SELECT dept.deptno, DECODE(emp.rowid, NULL, NULL,

emp.firstname | | emp.lastname) FROM emp, dept

Ngày đăng: 10/08/2014, 04:22