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

Phân tích và tối ưu hóa câu lệnh SQL

85 3,4K 64
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Phân tích và tối ưu hóa câu lệnh SQL
Tác giả Đặng Tiểu Hùng
Người hướng dẫn Ths Trần Xuân Thuận, Ths Lê Huy
Trường học Đại học Quốc gia Hà Nội
Chuyên ngành Ngành Tin học
Thể loại Luận văn tốt nghiệp cử nhân khoa học
Năm xuất bản 1998
Thành phố Hà Nội
Định dạng
Số trang 85
Dung lượng 2,99 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Phân tích và tối ưu hóa câu lệnh SQL

Trang 1

Gi¸o viªn ph¶n biÖn:

Ths §µo KiÕn Quèc LuËn v¨n tèt nghiÖp cö nh©n khoa häc

Ngµnh Tin häc M· sè: 01-02-10

Trang 2

Mục lục

Mục lục

Lời giới thiệu

Chơng I: Hệ CSDL quan hệ và ngôn ngữ hỏi có cấu trúc sql

A - Hệ CSDL quan hệ

1 Quan hệ và các phép toán đại số quan hệ

2 Cơ sở dữ liệu

3 Mô hình CSDL quan hệ

4 Hệ quản trị CSDL

5 Hệ tiên đề phụ thuộc hàm

6 Các dạng chuẩn trong CSDL quan hệ

B Giới thiệu về Ngôn ngữ hỏi có cấu trúc SQL

1 Khái niệm về ngôn ngữ SQL

2 Các đặc điểm của ngôn ngữ SQL

3 Các loại câu lệnh SQL thao tác với dữ liệu cần quan tâm khi tối u

Chơng II: CSDL phân tán theo mô hình Client - Server của Oracle

A Khái niệm về CSDL phân tán

B Mô hình xử lý Client-Server

C Hệ quản trị CSDL Oracle

Chơng III: Phơng pháp tối u hoá trong Hệ CSDL Oracle

A Các khái niệm cần biết để tối u hoá

1 Khái niệm về tối u hoá

2 Chiến lợc tối u trên các trên các biểu thức quan hệ

3 Các kiểu phân lớp trong CSDL Oracle

4 Các kiểu kết nối trong Oracle

5 Các phơng thức truy nhập dữ liệu

6 Các luật tối u

B Phân tích cách thi hành câu lệnh SQL

C Các bớc tối u hoá

1 Định giá biểu thức hoặc điều kiện

2 Chuyển dạng câu lệnh

3 Tối u hoá câu lệnh truy nhập trên VIEW

Trang 3

4 Chọn luật để tối u hoá

5 Chọn phơng thức truy nhập tới hàng

6 Chọn thao tác kết nối

D Kết luận về phơng pháp tối u trong Oracle

1 Tối u bằng việc thay đổi các thực thể

2 Tối u các Table space

3 Tối u vùng nhớ hệ thống SGA

4 Tối u hoá sử dụng Index

5 Tối u bằng thay đổi câu lệnh SQL

6 Thêm các chỉ thị thực hiện vào trong câu lệnh

Chơng IV: Giới thiệu và tối u hóa câu lệnh SQL trong hệ tính hoá đơn và quản lý khách hàng công ty cấp nớc TP HCM

A Giới thiệu về hệ chơng trình Tính hoá đơn và quản lý khách hàng

1 Đặt vấn đề

2 Phân tích bài toán

3 Giải quyết bài toán

B Cách thức tìm ra những lệnh cần tối u trong phần mềm

C Thực hiện tối u phần mềm Quản lý hoá đơn nớc

1 Tối u bằng sử dụng Index

2 Tối u bằng thêm chỉ thị thực hiện và thay đổi câu lệnh SQL

Kết luận

Tài liệu tham khảo

Phụ lục

Phụ lục A: Các lệnh phân tích đối tợng và phân tích câu lệnh

Phụ lục B: Tối u câu lệnh trên view Trong phần mềm tra cứu văn bản pháp qui

Phụ lục C: giới thiệu quá trình tối u câu lệnh kết nối trong phần mềm tra cứu văn bản pháp qui

Phụ lục D: Tối u hoá bằng sử dụng Index kết hợp với Hint Text rong phần mềm Tra cứu Văn bản Pháp qui

Trang 4

Lời giới thiệu

Trong tình hình hiện nay các doanh nghiệp có nhiều chi nhánh đặt ở nhiềunơi với khối lợng dữ liệu lớn, đa ngời dùng, thờng sử dụng cơ sở dữ liệu phân tán

Do đó các phần mềm máy tính hỗ trợ nghiệp vụ kinh doanh của các doanh nghiệpcũng phải đợc tổ chức và sử dụng hệ phân tán một cách hợp lý

Tuy nhiên tốc độ xử lý của các phần mềm quản lý có khối lợng dữ liệu lớnnằm phân tán sẽ trở nên vô cùng chậm, không đáp ứng đợc các yêu cầu của ngời

sử dụng Điều này đòi hỏi các nhà phát triển phần mềm không những phải xâydựng đợc những phần mềm lớn, đa ngời dùng mà còn phải không ngừng nghiêncứu và đa ra các giải pháp tối u hoá câu lệnh, nhằm từng bớc nâng cao tốc độ xử lý

và giảm giá thành của phần mềm

Qua tìm hiểu và nghiên cứu quá trình xây dựng một số phần mềm lớn ở ViệtNam thì quá trình tối u hoá câu lệnh của các Hệ chơng trình rất có ý nghĩa vì kinhphí đầu t của các doanh nghiệp cho các thiết bị phần cứng bớc đầu còn rất hạn chế.Cho nên giải pháp tối u hoá đến từng câu lệnh càng trở nên quan trọng hơn trongviệc đảm bảo sự tồn tại và phát triển của phần mềm Điều này luôn luôn có ý nghĩalớn ngay cả khi các yêu cầu về phần cứng đợc đáp ứng vì chỉ cần một câu lệnhkhông đợc tối u sẽ làm tăng thời gian chạy rất nhỏ nhng khi trong hệ chơng trìnhlớn, đa ngời dùng thì câu lệnh đó có thể đợc thực hiện lặp lại nhiều lần và thời giantơng ứng chung của cả hệ thống sẽ tăng lên rất nhiều

Trong quá trình tối u đối với một phần mềm, vấn đề đặt ra là làm sao có thểcải thiện hiệu suất của phần mềm trong điều kiện hiện có và thời gian thực thikhông tăng lên quá nhanh khi dữ liệu tăng lên nhiều (có thể từ hàng chục ngàn đếnhàng triệu bản ghi)

Đề tài của luận văn là “Phân tích và tối u hoá câu lệnh SQL trên Hệ CSDLORACLE”

Luận văn bao gồm những nội dung chính nh sau:

1 Hệ CSDL và ngôn ngữ SQL

2 Kiến trúc CSDL Oracle

3 Tìm hiểu quá trình thực hiện câu lệnh SQL và đa ra một số nguyên nhânlàm câu lệnh thực hiện kém hiệu quả

4 Các phơng pháp tối u hoá câu lệnh SQL trên CSDL Oracle

5 Thực hiện tối u trên Hệ tính hoá đơn và quản lý khách hàng của công tycấp nớc TP HCM, Hệ tra cứu Văn bản pháp qui trên Web

Trọng tâm của luận văn là đề xuất cải tiến các phơng pháp tối u hoá câu lệnhSQL và các cây phân tích câu lệnh SQL nhằm đa ra các chỉ mục (Index) thích hợp,tác động đến quá trình thực hiện lệnh làm tăng tốc độ chơng trình

Bớc đầu những cải tiến mà luận văn đề xuất đã thu đợc những kết quả đángkhích lệ nh tăng tốc độ thực hiện lên khoảng ba lần với phần mềm Tính hoá đơn và

Trang 5

tăng lên hàng chục lần đối với phần mềm tra cứu Văn bản pháp qui Hơn thế nhữngkết quả nghiên cứu của luận văn về phơng pháp tối u có thể dễ dàng áp dụng chocác phần mềm CSDL khác.

Cuối cùng em chân thành cảm ơn sự hỗ trợ và hớng dẫn tận tình của thầygiáo Hà Quang Thụy, thầy Trần Xuân Thuận, anh Lê Huy, anh Vũ Mạnh Cờng,chị Hoàng A Na cùng toàn thể các thầy giáo, cô giáo khoa Công Nghệ Thông Tin,các anh chị nhân viên Công ty CSE và các bạn đã giúp đỡ em rất nhiều trong quátrình thực tập, nghiên cứu về đề tài và hoàn thành luận văn này

Hà Nội - 1998

Trang 6

Đề-các D1D2D3 Dn là quan hệ n ngôi Mỗi bộ của quan hệ có n thànhphần (thờng hiểu là n cột) Các cột của quan hệ gọi là các thuộc tính Có thể địnhnghĩa quan hệ theo cách hình thức nh sau:

Gọi R=A1, A2, , An là tập hữu hạn các thuộc tính, mỗi thuộc tính Ai vớii=1, 2, , n có miền giá trị tơng ứng là dom(Ai) Quan hệ trên tập thuộc tính R=A1, A2, ., An là tập con của tích Đề-các, r  dom(A1)  dom(A2)  dom(An) Khi đó kí hiệu r(R) hoặc r(A1, A2, , An) là quan hệ

1.2 Khoá của lợc đồ quan hệ

Khoá (Key) của quan hệ r trên tập thuộc tính R={A1, An} là tập con KRsao cho bất kì hai bộ khác nhau t1, t2  r luôn thoả t1(K)t2(K)

Điều này có nghĩa là lợc đồ quan hệ không có hai bộ giống nhau trên mọithuộc tính của R

1.3 Các phép toán đại số quan hệ

Gọi r và s là quan hệ trên tập thuộc tính R={A1, A2, ,An} vàR1={B1,B2, ,Bn}

Giả thiết rằng quan hệ r, s là tập hữu hạn các bộ Đối với các phép hợp, giao vàtrừ, hai quan hệ tham gia phải là khả hợp

Hợp của hai quan hệ

Kí hiệu hợp của hai quan hệ r và s là r  s

Biểu diễn hình thức có dạng: r  s ={t/ts hoặc tr hoặc tr và s}

Phép giao

Kí hiệu giao của hai quan hệ r và s là r  s

Biểu diễn hình thức có dạng: r  s ={t/tr và s}

Trang 7

r  s={t/t có dạng (a1,a2, ,an,b1,b2, ,bn) trong đó (a1,a2, ,an  r ) và(b1,b2, ,bn  s)}

Phép chiếu

Gọi t là một bộ thuộc r, A R, t[A] là giá trị của bộ tại thuộc tính A, X 

R Với X={B1,B2, ,Bn} thì t[X]=(t[B1],t[B2], ,t[Bn]) Phép chiếu trên tập X củaquan hệ r kí hiệu là r[X] đợc định nghĩa nh sau:

Trong F có các phép toán so sánh là {<, =, >, >=, <=, }, và các phép logic là{, , }

Biểu diễn hình thức có dạng: ơF(r)={t r  F(t)=đúng}

Phép kết nối

Gọi  là một trong các phép so sánh =, >=, >, <, <=, <>, phép kết nối đợc

định nghĩa nh sau:

Phép kết nối của quan hệ r đối với thuộc tính A với quan hệ s đối với thuộc tính

B là: r   s = (tu)tr, us và tA  uB

với giả thiết mỗi giá trị của thuộc tính tA đều có thể so sánh đợc với giá trịcủa thuộc tính uB (qua phép so sánh ) Trờng hợp  là dấu "=" gọi là kết nốibằng hay còn gọi là kết nối tự nhiên Khi đó kết nối tại thuộc tính cùng tên của haiquan hệ và một trong hai thuộc tính đó sẽ đợc loại bỏ qua phép chiếu

Phép chia

Gọi r là quan hệ n-ngôi và s là quan hệ m-ngôi (n>m, s  ) Khi đó phép chia

đợc định nghĩa nh sau:

Trang 8

Phép chia r  s là tập tất cả (n-m) bộ t sao cho với mọi bộ u  s thì t

 u r.

2 Cơ sở dữ liệu

Cơ sở dữ liệu (CSDL) là mô hình thực thể phản ánh thế giới thực đợc đề cập

đến, do đó nó là sự trừu tợng hoá của thế giới thực CSDL là nguồn dữ liệu cho mọi

hệ thống thông tin dựa trên máy tính, những dữ liệu này đợc lu giữ trong máy tính

đợc tổ chức dựa trên một qui định nào đó nhằm giảm thiểu đợc sự d thừa và đảmbảo sự thống nhất với nhau (toàn vẹn dữ liệu)

Trong lịch sử phát triển của CSDL có 3 mô hình CSDL chính đợc sử dụng là:

 Mô hình phân cấp: Mô hình dữ liệu là một cây trong đó các nút biểu diễncác tập thực thể, giữa các nút con và các nút cha đợc liên hệ theo một mối liên hệxác định

5 Hệ tiên đề phụ thuộc hàm

Khái niệm phụ thuộc hàm trong một quan hệ là một khái niệm rất quan trọng

đối với việc xây dựng mô hình dữ liệu Trong các hệ thống thông tin quản lý khicần thiết kế CSDL quan hệ thờng đòi hỏi phải chọn lợc đồ các quan hệ Việc chọncác lợc đồ này tốt hơn hay xấu hơn lợc đồ khác đợc dựa trên một số các tiêu chuẩn

cụ thể nào đó Do đó cần phải nghiên cứu tính chất cơ bản cũng nh các thuật toán

để có thể nhận đợc những tập lợc đồ phù hợp Trọng tâm của công việc này là xét

đến các phụ thuộc dữ liệu, nghĩa là các mối ràng buộc có thể có hiện hữu của lợc

đồ Chẳng hạn nh thuộc tính này xác định duy nhất thuộc tính kia Ví dụ trongcông việc quản lý tập hoá đơn thì mã hoá đơn xác định duy nhất một khách hàngthanh toán hoá đơn đó

Cho R(U) là một lợc đồ quan hệ với U = {A1, A2, An} là tập hợp các thuộctính Giả sử có X và Y là tập con của U

Nói rằng X  Y (X xác định hàm Y hay Y phụ thuộc vào hàm X) nếu bất kì

r là một quan hệ xác định trên R(U) sao cho bất kì hai bộ t1, t2  r mà

Trang 9

t1[X] = t2[X] thì t1[Y] = t2[Y]

Phụ thuộc hàm kí hiệu là FD Cần lu ý rằng ở đây chỉ xét các phụ thuộc hàmthoả mãn cho mọi quan hệ trên lợc đồ tơng ứng của nó Không thể xem xét mộtphụ thuộc hàm thoả mãn quan hệ r đặc biệt (ví dụ quan hệ rỗng) của một lợc đồ Rrồi sau đó qui nạp rằng phụ thuộc đó là thoả mãn trên R

Ví dụ: Mỗi khách hàng tồn tại vừa đúng với một giá trị tơng ứng với từng thuộctính nh: Tên khách hàng, địa chỉ v.v và có thể viết nh sau:

khách hàng  Tên khách hàng, khách hàng  Địa chỉ,

Gọi F là tập hợp các phụ thuộc hàm đối với lợc đồ quan hệ R(U) và XY là

một phụ thuộc hàm, X, YU Nói rằng X Y đợc suy diễn logic từ F nếu mối quan hệ r trên R(U) đều thoả mãn các phụ thuộc hàm của F thì cũng thoả X Y Chẳng hạn có tập phụ thuộc hàm F = {A B, B C} thì A C suy ra từ F.

Gọi F+ là bao đóng (Closure) của F, tức là tập tất cả các phụ thuộc hàm đợc suydiễn logic từ F Nếu F = F+ thì F là họ đầy đủ (Full Family) của phụ thuộc hàm

Để xác định khoá của lợc đồ quan hệ và các suy diễn logic giữa các phụ thuộchàm cần thiết phải tính đợc F+ từ F Do đó đòi hỏi phải có các hệ tiên đề Tập cácqui tắc đợc Armstrong đa ra năm 1974 và thờng đợc gọi là hệ tiên đề Armstrong.Gọi R(U) là lợc đồ quan hệ với U = {A1, A2, An} là tập các thuộc tính và

X, Y, Z U Hệ tiên đề Armstrong bao gồm:

A1 (Phản xạ): Nếu YX thì X Y

A2 (Tăng trởng): Nếu ZU và X Y thì XZ YZ, trong đó kí hiệu XZ

là hợp của hai tập hợp X, Z thay cho kí hiệu XZ

A3 (Bắc cầu): Nếu X Y và Y Z thì X Z

Với những lập luận trên có thể rút ra những nhận xét: Giả sử F là tập các phụ

thuộc hàm đúng trên quan hệ r Nếu X Y là một phụ thuộc hàm đợc suy dẫn từ

F nhờ hệ tiên đề Armstrong thì X Y là đúng trên quan hệ r.

Những kết luận suy ra từ hệ tiên đề Armstrong:

a Luật hợp: Nếu X Y và X Z thì X YZ

b Luật tựa bắc cầu: Nếu X Y và WY Z thì WXZ

c Luật tách: Nếu X Y và ZY thì X Z

6 Các dạng chuẩn trong CSDL quan hệ

Do việc cập nhật dữ liệu (các phép tính nh thêm, loại bỏ, thay đổi) gây nênnhững dị thờng dữ liệu cho nên các quan hệ cần thiết phải đợc biến đổi thành cácdạng phù hợp Quá trình đó đợc xem là quá trình chuẩn hoá Quan hệ đợc chuẩnhoá là quan hệ mà trong đó mỗi miền của một thuộc tính chỉ chứa những giá trịnguyên tố (Atomic) nghĩa là không phân nhỏ đợc nữa và do đó mỗi giá trị trongquan hệ cũng là nguyên tố

Trang 10

Quan hệ có chứa các miền giá trị không nguyên tố gọi là quan hệ không chuẩnhoá Một quan hệ đợc chuẩn hoá có thể thành một hoặc nhiều quan hệ chuẩn hoákhác và không làm mất mát thông tin.

Ba dạng chuẩn hoá thờng đợc sử dụng trong thiết kế CSDL quan hệ

Dạng chuẩn thứ nhất (First Normal Form - 1NF) Dạng không chuẩn hoá

Dạng chuẩn thứ hai (Second Normal Form - 2NF)

Dạng chuẩn thứ ba (Third Normal Form - 3NF)

Sơ đồ quan hệ giữa các dạng chuẩn dữ liệu

1NF

Một lợc đồ quan hệ R đợc gọi là ở dạng chuẩn một (1NF) nếu và chỉ nếu toàn

bộ các miền có mặt trong R đều chỉ chứa một giá trị nguyên tố hay nói một cáchkhác lợc đồ quan hệ phải tồn tại khoá

Định nghĩa này cho thấy bất kì quan hệ chuẩn nào cũng ở dạng 1NF

Trang 11

A Y

Sơ đồ thuộc tính quan hệ phụ thuộc bắc cầu

Qua sơ đồ có thể thấy rằng A có thể xác định hàm Y Trong trờng hợp A/

Y thì đợc gọi là tính bắc cầu chặt

Tính bắc cầu sẽ đợc sử dụng trong 3NF Điều kiện A  XY là cần thiết vì nếu

A  Y  X thì theo luật phản xạ luôn có X Y A Điều kiện Y/ X để

loại bỏ nhiều khoá khỏi dạng chuẩn 3NF Cũng nh ở 2NF việc loại bỏ phụ thuộcbắc cầu đi đến 3NF cũng nhằm loại bỏ những dị thờng gây ra do quá trình cập nhậtdữ liệu vào quan hệ

Từ đó có thể định nghĩa dạng chuẩn 3NF nh sau:

Lợc đồ quan hệ R ở dạng chuẩn thứ ba (3NF) nếu nó là 2NF và mỗi thuộc tínhkhông khoá của R là không phụ thuộc hàm bắc cầu vào khoá chính

B Giới thiệu về Ngôn ngữ hỏi có cấu trúc SQL

Ngôn ngữ này đợc phát triển từ ngôn ngữ SEQUEL-2, thử nghiệm và cài đặt tạitrung tâm nghiên cứu của hãng IBM (tại SALJOISE, CALIFONIA) cho hệ thống quản trịcơ sở dữ liệu lớn điển hình là SYSTEM-R Trong SYSTEM-R, SQL vừa đóng vai trò làmột ngôn ngữ có thể thao tác độc lập của ngời dùng đầu cuối, đồng thời lại có khảnăng là một ngôn ngữ con đợc nhúng trong ngôn ngữ chủ PL/1

Hiện nay ngôn ngữ SQL đã đợc chuyển thành chuẩn chính thức của ANSI(Viện tiêu chuẩn Mĩ) và ISO (Cơ quan tiêu chuẩn quốc tế) và đợc rất nhiều cácphần mềm Quản trị hệ CSDL hỗ trợ cho ngôn ngữ này nh Oracle, NGRESS, DB2, SYBASE, INFOMIC v.v

2 Các đặc điểm của ngôn ngữ SQL

Đây là một ngôn ngữ rất phù hợp cho CSDL phân tán theo mô hình Server, nó cho phép nhiều ngời dùng cùng truy nhập đến một cơ sở dữ liệu với độ

Trang 12

Client-an toàn ổn định và tính bảo mật cao Ngôn ngữ SQL đảm bảo lu lợng truyền thôngtin trên mạng tối thiểu vì Client chỉ gửi câu hỏi và nhận về kết quả từ Server chứkhông phải gửi cả CSDL đi để xử lý Đặc biệt là do đợc các hệ quản trị CSDL hỗtrợ nên phơng thức chung để giao tiếp giữa các phần mềm quản trị CSDL (nh dùngODBC) và điều này làm cho hệ thống có tính mở Thật vậy, có thể sử dụng một hệquản trị CSDL tốt (đòi hỏi cấu phần cứng mạnh) nhng có thể vẫn dùng phần mềmyêu cầu phần cứng thấp trên các Client hoặc có thể dùng các máy NC (NetComputer) Mặt khác cũng có thể dùng nhiều hệ quản trị CSDL trong cùng một hệthống để khai thác các thế mạnh của chúng, ví dụ có thể dùng Lotus Notes trên cácClient (giao diện ngời dùng thân thiện, u việt về truyền thông, xử lý tốt văn bản) vàkết nối vào CSDL Oracle trên Server (tính bảo mật cao, đa ngời dùng, quản lý tốtcác giao tác-Transaction)

Ngôn ngữ SQL còn có khả năng thực hiện đợc những câu hỏi phức tạp mà cácdạng ngôn ngữ khác không đáp ứng đợc và một câu lệnh SQL có thể thay thế chomột tập hợp các câu lệnh lập trình CSDL thông thờng

Ngoài cơ cấu xử lý dữ liệu SQL còn có các công cụ để xây dựng các ứng dụngWEB, có khả năng xử lý dữ liệu, tạo báo cáo, thiết kế mô hình dữ liệu và quản trị

hệ thống

3 Các loại câu lệnh SQL thao tác với dữ liệu cần quan tâm khi tối u

Trong ngôn ngữ SQL có hai loại lệnh thao tác với dữ liệu, đó là:

 Các lệnh định nghĩa dữ liệu DDL (Data Defined Language): là các lệnh tạobảng, tạo Index v.v

 Các lệnh cập nhật dữ liệu DML (Data Manipulation Language) nh SELECT, UPDATE, INSERT, DROP.

Các lệnh cập nhật dữ liệu đợc sử dụng thờng xuyên cho nên cần thiết phải tìm

ra phơng án chọn cách viết câu lệnh, cách thực hiện câu lệnh sao cho có hiệu quảnhất về mặt thời gian cũng nh là về không gian lu trữ Oracle có thể tối u các loạicâu lệnh sau:

1 Câu lệnh đơn: Một câu lệnh đơn là một câu lệnh INSERT, UPDATE, DELETE hoặc

SELECT thao tác duy nhất trên một bảng

2 Query đơn: thực chất là một câu lệnh SELECT (có thể với nhiều bảng)

3 Kết nối: Một kết nối là một truy vấn dữ liệu nhiều hơn một bảng và từ kếtnối giữa các bảng nằm trong mệnh đề FROM Phép kết nối kéo dữ liệu từ các bảngkhác nhau và so sánh chúng từng đôi tại dòng chung ở tất cả các bảng

Có các kiểu kết nối sau:

 Liên kết ngang bằng (Equijoins) liên kết này dựa vào sự cân bằng của điềukiện tìm kiếm mà chỉ ra mối quan hệ giữa 2 bảng

 Liên kết không ngang bằng (Non-Equijoins) là liên kết 1 bảng này với mộtbảng khác dựa trên sự so sánh không bằng nh toán tử <=, >=, BETWEEN v.v

Trang 13

 Liên kết ngoài (Outer joins): Giả sử có 2 bảng KháchHàng và HoáĐơncùng

có 2 cột là MãKháchHàng Khi liên kết 2 bảng cho hiện lên tên của những kháchhàng có số thứ tự trùng nhau Nếu muốn hiện lên cả những khách hàng không thoảmãn trong bảng KháchHàng cũng đợc hiện lên thì cần dùng liên kết ngoài

 Liên kết với chính nó (Self joins): Đây là kiểu liên đặc biệt giữa mộtbảng với chính nó nh 2 bảng riêng biệt Để làm đợc việc này thì bảng đóphải có một tên quan hệ

4 Tích Đề-các: là kết quả của việc nhân hai tập hợp

5 Câu lệnh phức: Một câu lệnh phức nh là một câu lệnh SELECT, INSER, UPDATE,hoặc DELETE có chứa một câu lệnh SELECT khác (đợc gọi là subquery)

6 Các query kết hợp: Một query kết hợp là một query có sử dụng các toán tửtập hợp nh UNION, UNION ALL, INTERSECT hoặc MINUS

7 câu lệnh sử dụng View: View là một bảng logic mà thực chất là một câulệnh SELECT mà có thể thao tác giống nh đối với bảng

8 Câu lệnh phân tán: nghĩa là câu lệnh truy nhập dữ liệu từ xa

Trang 14

Chơng II CSDL phân tán theo mô hình Client - Server của

Oracle

A Khái niệm về CSDL phân tán

Một CSDL phân tán là một tập hợp dữ liệu mà về mặt logic tập dữ liệu nàythuộc về một hệ thống, nhng đợc trải trên các vị trí (khác nhau) của một mạng máytính

Chú ý rằng phân tán có nghĩa là dữ liệu không c trú trên một vị trí (khác vớiCSDL tập trung, đơn lẻ) và phải có tơng quan logic với nhau (dữ liệu có một số cácthuộc tính ràng buộc chúng với nhau) chứ không phải là một tập hợp CSDL cục bộhoặc các tệp c trú tại các vị trí khác nhau trong một mạng máy tính

Tuy việc quản trị một hệ thống CSDL phân tán sẽ gặp nhiều khó khăn hơn sovới hệ CSDL tập trung nhng xu hớng xây dựng các hệ CSDL phân tán ngày càngphát triển và có nhiều ứng dụng trong thực tế vì các nguyên nhân sau:

Xuất phát từ chính yêu cầu thực tế về tổ chức và kinh tế: Trên thực tế nhiều tổchức là không tập trung, dữ liệu ngày càng lớn và phục vụ cho đa ngời dùng nằmphân tán vì vậy CSDL phân tán là thích hợp với cấu trúc tự nhiên của các tổ chức

đó Đây là một trong các yếu tố quan trọng thúc đẩy việc phát triển CSDL phântán

Một ví dụ minh hoạ cho vấn đề này là hệ thống bán vé máy bay thống nhất trêntoàn thế giới Mỗi hãng hàng không có một hệ CSDL riêng, có sự quản lý riêng vàkhông thể có lý do nào để CSDL này tập trung ở một chỗ Mặt khác các hãng hàngkhông lại có hợp tác với nhau trong việc bán vé phục vụ hành khách cho nhữngtuyến đờng thuộc phạm vi quản lý của nhiều hãng Do vậy hệ thống dữ liệu vềchuyến bay của các hãng hàng không chính là một hệ CSDL phân tán đợc quản lýthống nhất tại trung tâm điều khiển bay đặt tại Mỹ

Sự liên kết các CSDL đang tồn tại: CSDL phân tán là giải pháp tự nhiên khi cócác CSDL đang tồn tại và sự cần thiết thực hiện xây dựng một ứng dụng toàn cục.Trong trờng hợp này CSDL phân tán đợc tạo từ dới lên (Bottom-up) từ các CSDL

đã tồn tại trớc đó Quá trình này có thể đòi hỏi CSDL phải cấu trúc lại cục bộ ởmột mức độ nhất định Dù sao, những sửa đổi này là nhỏ hơn rất nhiều so với việctạo lập một CSDL tập trung hoàn toàn mới

Sự phát triển mở rộng: Các tổ chức có thể mở rộng bằng cách thêm các đơn vịmới, vừa có tính tự trị vừa có quan hệ tơng đối với các tổ chức khác Khi đó CSDLphân tán hỗ trợ sự mở rộng tổ chức một cách uyển chuyển với một mức độ ảnh h-ởng tối thiểu tới các đơn vị đang tồn tại Với CSDL tập trung, cũng có thể khởi tạokích thớc lớn cho việc mở rộng tổ chức trong tơng lai Điều đó rất khó đánh giá vàchi phí thực hiện sẽ lớn, hoặc việc mở rộng tổ chức sẽ có ảnh hởng lớn không chỉtrên các ứng dụng mới mà còn trên các ứng dụng cũ đang tồn tại

Làm giảm tổng chi phí tìm kiếm: Trên thực tế nhiều ứng dụng cục bộ rõ rànglàm giảm tổng chi phí truyền thông trên phơng diện một CSDL tập trung Bởi vậymột trong các mục đích chính trong thiết kế CSDL phân tán là tạo tối đa các vị tríứng dụng

Trang 15

Sự quan tâm hiệu suất (Performance Considerations): S tồn tại một vài bộ xử

lý tự trị đa đến kết quả tăng hiệu suất thông qua một mức độ song song cao Sựquan tâm này chỉ có thể đợc ứng dụng cho một hệ thống đa xử lý không nhất thiếtphải là một hệ CSDL phân tán Dù sao, CSDL phân tán có lợi trong sự phân tán dữliệu phản ánh các tiêu chuẩn phụ thuộc ứng dụng và số tối đa vị trí các ứng dụng.Bằng phơng pháp này sẽ giảm tối thểu sự gây trở ngại lẫn nhau giữa các bộ xử lý.Trọng tải đợc chia sẻ giữa các bộ xử lý, và các tắc nghẽn nguy kịch, nh tắc nghẽnmạng truyền thông, tắc nghẽn dịch vụ chung cho toàn bộ hệ thống sẽ đợc tránh.Kết quả này là một hệ quả của đòi hỏi khả năng xử lý tự trị cho các ứng dụng cục

bộ đã đợc phát biểu trong định nghĩa CSDL phân tán

Tính tin cậy và tính sẵn sàng: CSDL phân tán, đặc biệt với dữ liệu d thừa, cũng

đợc sử dụng để đạt đợc một sự tin cậy và tính sẵn sàng cao hơn Để đạt đợc mục

đích này cũng gặp một số trở ngại và phải giải quyết bằng việc sử dụng các kỹthuật vẫn cha đợc hoàn thiện Bản thân khả năng xử lý tự trị của các vị trí khácnhau trong CSDL phân tán cũng không bảo đảm tính tin cậy cao của hệ thống, nh-

ng nó đảm bảo hạn chế sự đổ vỡ toàn bộ hệ thống Các sự cố trong CSDL phân tán

có thể thờng xuyên hơn một CSDL tập trung vì có số lợng thành phần lớn hơn,

nh-ng hậu quả chỉ ảnh hởnh-ng tới các ứnh-ng dụnh-ng sử dụnh-ng dữ liệu của vị trí có sự cố vàviệc đổ vỡ toàn bộ hệ thống là hiếm xảy ra

B Mô hình xử lý Client-Server

Mô hình xử lý Client-Server là một mô hình liên quan đến việc xử lý hợp tác

đối với các yêu cầu từ Client (hoặc ngời yêu cầu) đợc máy Server tiến hành xử lý

và gửi trả kết quả về cho Client

Trong khi các hệ phân tán là hiện tợng tơng đối mới thì phân tán ở mức hệ điềuhành đã đợc hiểu khá tờng tận và đợc dùng rộng rãi Ví dụ phân tán các chức năng

số học và vào/ra, phân tán các chức năng hệ điều hành cho nhiều CPU trong bộ đa

xử lý của IBM 3090/600 (sáu bộ xử lý)

Hệ phân tán đã tiến hoá từ môi trờng nguyên thuỷ nhất để hỗ trợ cho xử lý ứngdụng Chính môi trờng xử lý dựa trên Server cha có khả năng xử lý ứng dụng phântán Việc xử lý ứng dụng trên Server đợc thực hiện trên một hệ thống máy tính cógắn các thiết bị “câm” không thông minh Một máy PC đơn lẻ hay máy lớn IBMvới các thiết bị cuối dựa trên hiển thị kí tự là một thí dụ về môi trờng xử lý dựa trênServer Theo quan điểm ứng dụng thì xử lý trên Server hoàn toàn không phân tán.Việc xử lý hợp tác Client-Server thực tế là một dạng riêng của xử lý phân tánvới tài nguyên (và nhiệm vụ ảnh hởng tới tài nguyên) đợc trải qua hai hay nhiều hệthống tính toán rời rạc

Mô hình xử lý Client-Server đã nổi lên nh một mức cao hơn của việc xử lýdùng chung thiết bị đã có trong mạng cục bộ (LAN) Thí dụ trong môi trờng xử lýdùng chung thiết bị, các máy tính cá nhân (PC) đợc gắn với thiết bị hệ thống vớimục đích cho phép các PC này dùng chung tài nguyên tệp trên đĩa cứng và máy in.Theo thuật ngữ LAN, các thiết bị dùng chung nh vậy đợc gọi là các phục vụ(Server) Tên phục vụ là thích hợp hơn cả vì các thiết bị dùng chung này dùng đểnhận các yêu cầu cần phục vụ từ các PC cho các chức năng thấp, tổng quát Trong

xử lý dùng chung thiết bị trên LAN, các yêu cầu của PC này thờng bị giới hạn vềcác dịch vụ liên quan tới tệp dùng chung hay tệp xử lý in Nhợc điểm hiển nhiêncủa cách tiếp cận nh vậy là ở chỗ mọi xử lý ứng dụng đều đợc thực hiện trên các

PC đơn lẻ, và chỉ một số chức năng nào đó (in, vào ra tệp) mới là phân tán Do đó,

Trang 16

toàn bộ tệp phải đợc gửi cho một PC đã ban ra yêu cầu READ tệp đó Nếu tệp đợccập nhật thì toàn bộ tệp đó bị khoá bởi PC đã ban ra yêu cầu cập nhật tệp đó.

Chính vì các lý do trên mà mô hình xử lý Client-Server là việc mở rộng tựnhiên của việc dùng chung thiết bị và các trạm làm việc đóng vai trò khách củamáy chủ Phần có ý nghĩa nhất của mô hình này là xử lý ứng dụng đợc phân chia(không nhất thiết phải chia đều) giữa Client và Server Xử lý thực tế đợc khởi đầu

và kiểm soát một phần bởi nơi yêu cầu dịch vụ là Client nhng không phải theokiểu chủ-tớ Thay vì vậy, cả Client và Server đều hợp tác để thực hiện thành côngứng dụng Chẳng hạn nếu PC chạy chơng trình cần một bản ghi đặc biệt nào đó từmột tệp dùng chung thì nó sẽ chuyển yêu cầu cho Server CSDL tiến hành xử lý cục

bộ rồi nhận nhận lại đúng bản ghi đã yêu cầu

Về mặt kiến trúc xử lý Client-Server có các đặc tính:

Đờng liên lạc tin cậy, chắc chắn giữa Client và Server

Các Client khởi xớng tơng tác Client-Server

Phân tán xử lý ứng dụng giữa Client và Server

Server kiểm soát các dịch vụ do Client yêu cầu

Server làm trọng tài cho các yêu cầu tranh chấp

Các u điểm của mô hình Client-Server:

Phát huy đợc sức mạnh năng lực công nghệ tính toán của PC Các PC ngày nayvới giá thành nhỏ đã cung cấp một năng lực tính toán đáng kể mà trớc đây các máytính lớn mới có đợc

Cho phép xử lý đợc thực hiện tại gần nguồn dữ liệu cần xử lý (các CSDL trênServer) Do đó lu lợng (và thời gian đáp ứng) của mạng giảm đi rất nhiều, hiệunăng và khả năng chuyển tải của mạng đợc tăng lên

Tạo điều kiện cho việc dùng giao diện đồ hoạ (GUI) có sẵn trên các trạm làmviệc hiện có

Cho phép và cổ vũ hệ thống mở Thực tế là Client và Server có thể chạy trêncác nền phần cứng và phần mềm khác nhau

Tuy nhiên không phải là mô hình Client-Server đã hoàn chỉnh, mô hình nàyvẫn còn các nhợc điểm sau đây:

Nếu có nhiều thành phần logic của ứng dụng đợc chuyển về Server thì Server

sẽ nảy sinh hiện tợng cổ chai nh máy tính lớn (main frame) trong mô hình thiết bịcuối Các tài nguyên của Server sẽ ở trạng thái bị đòi hỏi làm việc ở mức cao hơn

do việc tăng số ngời tiêu thụ tài nguyên (End User)

Các ứng dụng phân tán, đặc biệt là những ứng dụng đợc thiết kế cho xử lý hợptác thờng phức tạp hơn các ứng dụng không phân tán Tuy nhiên một vài sự phứctạp này có thể đợc giảm bớt bằng cách thu nhỏ vấn đề lớn thành một tập hợp vấn

đề nhỏ hơn, có thể có đợc tính độc lập lẫn nhau, tơng tự nh trong hệ thiết kế đơnthể

Trang 17

C Hệ quản trị CSDL Oracle

Đối với một hệ CSDL phân tán thì hệ quản trị CSDL có ý nghĩa rất quan trọngvì phải đảm bảo tính thống nhất và toàn vẹn của dữ liệu, đảm bảo cho các chơngtrình ngời dùng truy xuất đến CSDL phân tán nh là một CSDL tập trung duy nhất.Ngoài ra hệ quản trị CSDL còn phải đảm bảo chức năng phân quyền truy nhập vàbảo mật trên đờng truyền

Trong các hệ quản trị CSDL phân tán hiện nay thì hệ quản trị CSDL Oracle đợc

đánh giá là u việt nhất với các chức năng tiên tiến: phân tán, sao bản (replication),bảo mật cao, tính nhất quán dữ liệu, thủ tục chạy ngầm (Procedure Storge), đoạnmã xử lý sự kiện kích hoạt (Triggers), khoá dữ liệu đến từng hàng, chạy thông suốttrên 120 loại phần cứng từ máy lớn đến máy nhỏ và 19 hệ điều hành, hỗ trợ hầu hếtcác nghi thức mạng, là CSDL đầu tiên trên thế giới tích hợp Web

Oracle Server cung cấp việc quản lý dữ liệu bảo mật, tin cậy, hiệu quả cho các

hệ thống ứng dụng từ các hệ thống giao dịch trực tuyến (OLTP) cỡ lớn đến các ứngdụng sử dụng các kho dữ liệu (Data Warehouse) có nhiều giao dịch Oracle khôngchỉ hỗ trợ cho các nhu cầu quản lý nghiệp vụ phức tạp mà còn cung cấp các công

cụ mềm dẻo cho phân tán dữ liệu tới ngời dùng một cách thực sự, hiệu quả và phùhợp mọi qui mô để đạt đợc hiệu năng tối u từ mọi tài nguyên đã có

OS

server sql

Pl/sql

Công cụ ứng dụng

Oracle

Dữ liệu

Kiến trúc phân lớp của hệ CSDL ORACLE

Hệ quản trị CSDL Oracle bao gồm CSDL Oracle, các môi trờng phát triển, cáccông cụ và các trình ứng dụng đợc viết trên đó đợc hoạt động theo mô hình xử lýClient-Server

Trang 18

hợp thành

cấp phát cho

bộ phận

Cơ sở dữ liệu ORACLE

Tablespace

hợp thành

bộ phận

bộ phận

hợp thành còn trống Đã sử dụng

hợp thành

hợp thành Segment

Rollback Temporary Cache

hợp thành

bộ phận Các file của HĐH

bộ nhớ cho các Tablespace là các Extent Mỗi Extent lại bao gồm các Segment(đoạn) nh Segment Index, Segment dữ liệu

Về mặt vật lý thì mỗi Tablespace đợc tạo nên từ các file của hệ điều hành nằmphân tán Các file của hệ điều hành sẽ đợc chia thành nhiều Block Mỗi Block sẽchứa một hoặc nhiều hàng dữ liệu

Kiến trúc Server dữ liệu của Oracle:

Trang 19

Database Buffer Cache

Parameter Files

Control Files

Offline Storage

CKPT Data Buffer Cache

Mô hình kiến trúc của Oracle Server có thể chia ra làm ba khối cơ bản nh sau : Oracle data base : Bao gồm Database Files, Redolog Files, Control Files vàParameter Files

-Database File : lu trữ tất cả dữ liệu của cơ sở dữ liệu

-Redo log File : dùng để khôi phục, ghi lại những thay đổi thông tin trêndatabase

-Control File : ghi lại cấu trúc vật lý của Database

-Parameter File hay còn gọi là Init File chứa các tham số thiết lập môi trờnglàm việc nh đờng dẫn tới CSDL, kích thớc thành phần trong SGA, tạo khả năngtheo dõi các câu lệnh SQL và dựng lại cây phân tích câu lệnh File này nằm ở thmục DATABSE trong th mục đã cài Oracle và có tên là ‘INIT’ + <bí danhCSDL>+’.ORA’

Thể hiện của Oracle Server :

Trang 20

Là sự kết hợp giữa bộ nhớ đệm và các tiến trình nền Bất cứ khi nào OracleServer bắt đầu, một vùng nhớ hệ thống toàn cục (System Global Area : SGA) đợccấp phát, đồng thời các tiến trình nền cũng đợc khởi động Thể hiện của Oracle làmột phơng tiện để truy cập dữ liệu trong Data File.

- SGA: một nhóm bộ đệm dùng chung mà Oracle Server cấp phát cho một thểhiện

- Background Process: là các tiến trình chạy ngầm bên dới phục vụ cho tất cảcác User

- User Process & Server Process :

User Process đợc tạo khi User chạy một chơng trình ứng dụng Khi đó OracleServer cũng tạo ra các Server Process để đáp ứng các yêu cầu từ phía User Process.Giữa User Process và Server Process luôn có sự liên hệ với nhau

Quá trình thực hiện của Server Process theo một số bớc sau :

+ Phân tích cú pháp các câu lệnh SQL (Parse)

+ Thi hành các câu lệnh SQL (Excute)

+ Trả lại kết quả thực hiện các câu lệnh SQL cho User Process (Fetch)

Trớc khi dữ liệu có thể truy cập đợc thì Server Process phải đợc thực hiện để

đa dữ liệu lên vùng nhớ đệm dùng chung Các khối dữ liệu sau khi đợc thao tác,sửa đổi sẽ đợc viết trở lại bộ nhớ ngoài nhờ một tiến trình nền gọi là DatabaseWriter (DBWR) Do việc cập nhật lại dữ liệu từ vùng nhớ dùng chung (SGA) ra đĩa

là rất tốn thời gian cho nên tiến trình CKPT (Check Point) sẽ đảm bảo việc cậpnhật dữ liệu sẽ thực hiện vào thời điểm cần thiết Cũng do việc cập nhật xảy rakhông liên tục cho nên tiến trình LGWR (Log Writer) sẽ cập nhật lại các thay đổicủa Redo Buffer ra các Redo Log File Nếu sử dụng lu trữ trực tuyến thì các RedoLog File sẽ đợc cập nhật trực tuyến sang một vùng lu trữ khác (Offline Storage) để

đề phòng sự cố xảy ra đối với hệ thống

Chơng III Ph

-ơng pháp tối u hoá trong Hệ CSDL Oracle

A Các khái niệm cần biết để tối u hoá

Phần này sẽ đa ra một số khái niệm đợc sử dụng quá trình tối u hoá

Qui ớc rằng tên các bảng cũng nh các thuộc tính trong các ví dụ minh hoạ sẽviết tiếng Việt cho cho dễ hiểu nhng trong thực tế phải bỏ các dấu tiếng Việt đi bởivì Oracle cha hỗ trợ triệt để cho ngôn ngữ Việt

1 Khái niệm về tối u hoá

Nói chung các ngôn ngữ bậc cao (trong đó có ngôn ngữ SQL) đòi hỏi thực hiệntrong máy đều rất tốn kém thời gian Đặc biệt là khi dữ liệu nhiều lên thì thời gianthực hiện các câu lên sẽ tăng theo hệ số nhân, do đó cần thiết phải biến đổi các câuhỏi cho hợp lý để giảm thời gian tính toán

Trang 21

Vậy có thể định nghĩa khái niệm tối u hoá nh sau:

Tối u hoá (optimization) câu lệnh SQL là một quá trình để tạo điều kiện cho câu lệnh SQL đa ra kết quả đạt hiệu quả cao nhất hiểu theo nghĩa thời gian đáp ứng và sử dụng tài nguyên hệ thống là nhỏ nhất.

Theo định nghĩa này thì việc tối u hoá câu lệnh SQL không đơn thuần là tối umã câu lệnh mà còn có thể thay câu lệnh SQL bằng câu lệnh SQL khác cho racùng kết quả nhng thực hiện hiệu quả hơn, điều chỉnh các tham số hệ thống để tàinguyên dành cho câu lệnh là hợp lý nhất, thay đổi các thực thể và quan hệ giữa cácthực thể cho câu lệnh thực hiện nhanh hơn

Chú ý rằng việc tối u hoá không nhất thiết phải đúng là “tối u” trên mọi khả

năng có thể của các cách cài đặt các câu hỏi bởi vì nếu sử dụng tài nguyên càngnhiều thì câu lệnh càng có khả năng thực hiện nhanh tuy nhiên sẽ giảm số khốilệnh đợc xử lý đồng thời và ngợc lại

Trong thực tế thì quá trình tối u hoá phải tiến hành thờng xuyên trong mọi khâusản xuất phần mềm để sản phẩm ngày càng đợc hoàn thiện hơn, điều này cũng làmột trong các lý do ra đời các phiên bản Version 1.0, Version 2.0 của phầnmềm

2 Chiến lợc tối u trên các trên các biểu thức quan hệ

Ullman J.D trong các kết quả nghiên cứu công bố lần đầu tiên của mình đãtrình bày 6 chiến lợc tổng quan cho việc tối u hoá Các chiến lợc này sẽ đợc thểhiện trực tiếp hay gián tiếp trong các bớc tối u cụ thể trong Oracle

Nội dung của các chiến lợc đó nh sau:

2.1 Thực hiện phép chọn càng sớm càng tốt

Biến đổi câu hỏi để đa phép chọn vào thực hiện trớc nhằm làm bớt kích cỡ củakết quả trung gian và do vậy chi phí phải trả giá cho việc truy nhập bộ nhớ thứ cấpcũng nh lu trữ của bộ nhớ chính sẽ nhỏ đi

2.2 Tổ hợp những phép chọn (xác định với tích Đề-các) thành phép kết nối

Nh đã biết, phép kết nối, đặc biệt là phép kết nối bằng có thể thực hiện đợc

“rẻ” hơn là thực hiện phép tích các trên cùng các quan hệ Nếu kết quả của các R x S là đối số của phép chọn và phép chọn liên quan tới các phép so sánh giữacác thuộc tính của R và S thì rõ ràng phép tích Đề-các là phép kết nối

Đề-2.3 Tổ hợp dãy các phép tính một ngôi nh các phép chọn và phép chiếu

Một dãy các phép một ngôi nh phép chọn hoặc phép chiếu mà kết quả củachúng phụ thuộc và các bộ của một quan hệ độc lập thì có thể nhóm các phép đólại

2.4 Tìm các biểu thức con chung trong một biểu thức

Nếu kết quả của một biểu thức con chung (biểu thức xuất hiện hơn một lần) làmột quan hệ không lớn và nó có thể đợc đọc từ bộ nhớ thứ cấp với ít thời gian thìnên tính toán trớc biểu thức đó chỉ một lần Biểu thức con chung có lên quan tới

Trang 22

một phép kết nối thì trong trờng hợp tổng quát không thể đợc thay đổi nhờ việc đẩyphép chọn vào trong.

Điều đáng quan tâm hơn là các biểu thức con chung có tần số xuất hiện lớn

đ-ợc biểu diễn trong các View (khung nhìn) của các ngời dùng vì để thực hiện cáccâu hỏi đó cần thay thế một biểu thức cố định vào cho View

2.5 Xử lý các tệp trớc

Có hai vấn đề cần xử lý trớc quan trọng cho các tệp số là sắp xếp trớc các tệp

và thiết lập các tệp chỉ số Và nh vậy khi thực hiện các phép tính có liên quan tớihai tệp (phép tính hai ngôi) sẽ nhanh hơn rất nhiều

2.6 Đánh giá trớc khi thực hiện tính toán

Một khi cần chọn trình tự thực hiện các phép tính trong biểu thức hoặc chọnmột trong hai đối số của một phép tính hai ngôi cần tính toán xem chi phí thựchiện các phép tính đó (thờng là số phép tính, thời gian, kích thớc bộ nhớ theo một

tỷ lệ giữa kích cỡ các quan hệ ) Từ đó sẽ có đợc các chi phí (giá thành) phải trảcho các cách khác nhau để thực hiện các câu hỏi

3 Các kiểu phân lớp trong CSDL Oracle

Một trong các thông tin quan trọng khi tối u hoá là chọn cách truy nhập dữ liệudựa trên đặc điểm lu trữ Thông thờng khi truy xuất tới một hàng của bảng phảiduyệt tuần tự từ đầu của bảng cho tới hàng cần truy xuất Tuy nhiên mỗi hàng củacác bảng trong Oracle đều chứa một địa chỉ của nó gọi là ROWID Cách truy xuấttuần tự rất chậm khi dữ liệu lớn và cần tìm cách truy xuất trực tiếp tới hàng thôngqua ROWID Do vậy trong Oracle thì dữ liệu đợc lu trữ theo các dạng phân lớp và khicần truy xuất tới hàng thì tìm ROWID tơng ứng ở các phân lớp và truy xuất tới hàngthông qua ROWID tìm đợc:

3.1 Phân lớp dựa vào Index

Khi mà các bảng đợc Index thì cùng với giá trị của trờng Index còn có các

ROWID Tuỳ theo giá trị của cột Index có là khoá duy nhất hay không thì tơng ứngvới một khoá của Index có thể có một hoặc có nhiều ROWID Với một giá trị khoáIndex thì sẽ nhận đợc ROWID tơng ứng và ROWID sẽ đợc dùng tìm ra hàng đợc yêucầu trong một nhóm các hàng có cùng giá trị khoá Index Thông thờng các Indextrong Oracle đợc tạo theo dạng “B-tree” tuy nhiên Oracle còn cung cấp một mứcIndex khác gọi là Bitmap Index Kiểu Index mới mà đặc biệt hiệu quả với nhữngcột mà số lợng nhiều nhng tập giá trị lại ít ví dụ nh cột giới tính, cột mã khu vựcchẳng hạn Bằng việc ánh xạ vị trí các cột với các bit sẽ dễ dàng nhận đợc kết cầntìm Ví dụ sau sẽ minh hoạ điều này

Giả sử có bảng SinhViên có các thuộc tính MãSinhViên, GiớiTính, KhuVực cócác giá trị nh sau:

MãSinhViên GiớiTính KhuVực

Trang 23

Khi thực hiện phép Index với cột KhuVực sẽ thu đợc bảng sau:

Giả sử để lấy ra mọi thuộc tính của bảng sinh viên với điều kiện sinh viên là nữ

ở khu vực KV2 và KV3 với câu lệnh:

SELECT * FROM SinhViên WHERE GiớiTính=’Nữ’ AND KhuVực IN (‘KV2’, ’KV3’);

Bằng việc sử dụng Bitmap Index và truy nhập trên bảng Bitmap để lọc ra tập hợpcác hàng thoả mãn điều kiện đã nêu, quá trình đó đợc mô tả nh bảng dới đây:

GiớiTính = ’Nữ’ KhuVực = ‘KV2’ KhuVực = ‘KV3’

0 1

1 AND ( 0

0 1

0 1

0 OR 0

1 1

0 0

1 ) = 1 0 0

0 1

1 AND 0 0 1

0 1

1 = 1 1 1

0 1 1 0 0 1

Trang 24

cạnh nhau tạo hiệu quả hơn

Bảng không Cluster Các dữ liệu quan hệ đ ợc đặt từng phần, cần nhiều chỗ hơn

Bảng Phòng MãPhòng TênPhòng TP

Để sử dụng đợc Cluster thì cần phải tạo ra Index cho Cluster gọi là chỉ mụcphân lớp Khác với chỉ mục thông thờng, loại chỉ mục này có các đặc điểm sau

 Khoá cho các giá trị NULL có chung một đề mục trong chỉ mục phân lớp

 Mỗi đề mục trong chỉ mục phân lớp sẽ chỉ đến hàng đầu tiên của khối dữliệu trong Cluster

 Dữ liệu của bảng đợc lu trữ trong Cluster chỉ đợc truy nhập nếu có chỉ mụcphân lớp

3.3 Phân lớp dựa vào khoá của hàm băm

Trang 25

Phân lớp bằng hàm băm (Hash Function) là một cách thức lu trữ dữ liệu theokhoá băm để tối u quá trình truy xuất dữ liệu Thông qua một hàm băm thì mỗihàng có một giá trị khoá băm và các hàng có khoá băm trùng nhau sẽ đợc nằmtrong cùng một lớp Để truy nhập đến hàng trớc tiên cần sử dụng hàm băm để tìm

ra khoá hàm băm của hàng Sau đó truy nhập đến bảng băm thông qua khoá hàngbăm và lấy ra đợc ROWID để truy nhập trực tiếp đến hàng

3.4 Không phân lớp

Nghĩa là dữ liệu đợc ghi tự nhiên nh lúc tạo do vậy việc truy nhập thông tinluôn đòi hỏi phải dùng duyệt toàn bộ bảng

4 Các kiểu kết nối trong Oracle

Do việc đảm bảo tính chuẩn hoá của dữ liệu mà các bảng sẽ đợc kết nối vớinhau thông qua các khoá Một trong các bớc tối u hoá là lựa chọn kiểu kết nốithích hợp Trong Oracle có các kiểu kết nối sau:

4.1 Kết nối bằng Nested-Loop

Để thực hiện một kết nối theo kiểu Nested-Loop, Oracle sẽ chọn ra một bảng

nh là bảng ngoài hay là bảng dẫn dắt (outer table hoặc driving table), bảng còn lại

đợc gọi là bảng nội (inner table) Với mỗi hàng trong bảng ngoài thì Oracle sẽ tìm

tất cả các hàng trong bảng nội thoả mãn điều kiện kết nối Cặp hàng thoả mãn điềukiện kết nối sẽ đợc hợp lại thành một và thêm vào tập các hàng kết quả

Ví dụ: SELECT * FROM NhânViên, Phòng WHERE NhânViên.MãPhòng=Phòng.MãPhòng;

nesloop

NhânViên (Full)

Phòng (RowId)

pk_phong (Range Scan)

Trang 26

Ví dụ: SELECT * FROM NhânViên, Phòng WHERE NhânViên.MãPhòng=Phòng.MãPhòng;

merge join

sort (join)

sort (join)

Phòng (full)

NhânViên (full)

NhânViên (cluster)

4.3 Kết bằng sử dụng hàm băm

Oracle sẽ duyệt toàn bộ các bảng và chia (băm) chúng ra thành nhiều đoạn dựavào bộ nhớ có sẵn

Oracle xây dựng một bảng băm từ các đoạn này (nếu có thể Oracle sẽ chọn một

đoạn đặt vừa vùng bộ nhớ có sẵn) Oracle sẽ sử dụng các đoạn tơng ứng trong mộtbảng khác để khảo sát bảng băm Các đoạn khác mà không nằm vừa trong bộ nhớ

sẽ đợc đặt trên đĩa

Ví dụ: SELECT * FROM NhânViên, Phòng WHERE NhânViên.MãPhòng=Phòng.MãPhòng;

Trang 27

hash join

Phòng (full)

NhânViên (cluster)

5 Các phơng thức truy nhập dữ liệu

Phơng thức truy nhập dữ liệu (Acces Path) là cách thức truy nhập tới một hàngcủa bảng Dới đây là bảng các phơng thức truy nhập sắp xếp theo độ u tiên cao đếnthấp

1 Chọn một hàng bằng ROWID

2 Chọn một hàng bằng Cluster kết nối

3 Chọn một hàng bằng hàm băm với khoá

duy nhất hay khoá chính

4 Chọn một hàng bằng khoá duy nhất hay

15 Duyệt toàn bộ (Full Table Scan)

Oracle chỉ có thể chọn một thành phần truy nhập trong bảng đã liệt kê cho mộtbảng nếu câu lệnh chứa mệnh đề điều kiện FROM hoặc những cấu trúc khác làmcho các cách truy nhập trở thành có thể dùng đợc

Trang 28

ROWID là địa chỉ của một hàng của table trên đĩa Thông qua ROWID có thể truynhập trực tiếp đến hàng đó và đây là cách truy nhập thông tin nhanh nhất tới hàng.Phơng pháp này đợc sử dụng khi trong mệnh đề FROM có chứa ROWID hoặc là hànghiện tại của biến tập hợp (CURRENT OF CURSOR).

Ví dụ: SELECT * FROM NhânViên WHERE ROWID = ‘000000DC5.0000.0001’;

5.2 Chọn một hàng bằng Cluster kết nối

Khi Index trên trờng không duy nhất giá trị thì nhóm các hàng có cùng giá trịkhoá sẽ có ROWID chứa trong cùng một Cluster Index Bằng cách tìm ROWID trongCluster Index Oracle sẽ truy nhập thông tin tới hàng một cách trực tiếp (qua ROWID).Phơng thức truy nhập này sẵn dùng cho các câu lệnh mà những table kết nối trongcùng một Cluster và nếu cả hai điều kiện sau cùng đúng:

 Câu lệnh phải có mệnh đề FROM chứa điều kiện mà mỗi cột của Cluster làkhoá của một bảng khác

 Mệnh đề FROM cũng phải đảm bảo điều kiện kết nối chỉ trả lại duy nhất mộthàng Những điều kiện nh vậy thờng là khoá duy nhất hoặc là khoá chính

Trong những điều kiện phải có chứa toán tử AND để Oracle có thể xây dựngthành thao tác Nested Loops

VD: Trong bảng NhânViên và bảng Phòng có chứa cột MãPhòng và cộtMãNhânViên là khoá chính của bảng NhânViên

SELECT * FROM NhânViên, Phòng

WHERE NhânViên.MãPhòng=Phòng.MãPhòng AND NhânViên.MãNhânViên=7900;

5.3 Chọn một hàng bằng khoá băm (Hash Key) với khoá duy nhất hoặc khoá chính

Duyệt băm (Hash Scans) là phơng pháp truy nhập tới hàng bằng cách sử dụnghàm băm (Hash Function) Phơng thức này sẵn dùng khi mà cả hai điều kiện sau

đợc thoả mãn:

 Câu lệnh phải có mệnh đề FROM sử dụng tất cả các cột trong khoá của hàmbăm Mặt khác để dùng đợc khoá của hàm băm thì các điều kiện tơng ứng phải kếtnối với nhau bằng toán tử AND

 Câu lệnh phải đảm bảo chỉ trả lại một giá trị hàng duy nhất bởi vì giá trị cáccột tạo thành khoá của hàm băm cũng tạo ra một khoá duy nhất hoặc là khoáchính

Để thực hiện câu lệnh này, Oracle dùng hàm băm để định giá trị khoá băm tơngứng với các giá trị cung cấp bởi câu lệnh Giá trị khoá tìm đợc sẽ sử dụng để tìmbản ghi tơng ứng trong table

Ví dụ: Giả sử rằng trong bảng HoáĐơn và bảng NộiDungHoáĐơn đợc lu trongmột nhóm hàm băm và SốHoáĐơn vừa là khoá chính vừa là khoá hàm băm Câulệnh sau sẽ sử dụng phơng thức hàm băm

Trang 29

SELECT * FROM HoáĐơn WHERE SốHoáĐơn = 65118968;

5.4 Chọn một hàng bằng sử dụng khoá duy nhất hoặc bằng khoá chính

Phơng thức này chỉ dùng đợc khi câu lệnh phải có mệnh đề FROM có sử dụngtất cả các cột của khoá duy nhất (hoặc khoá chính) trong điều kiện tơng ứng Để cóthể sử dụng đợc khoá thì các điều kiện tơng ứng với cột nằm trong khoá phải liênkết với nhau bằng toán tử AND Thông qua bảng Index tơng ứng với các khoá thìOracle sẽ tìm đợc ROWID tơng ứng để truy nhập trực tiếp tới hàng

VD: Giả sử MãNhânViên là khoá chính của bảng NhânViên, câu lệnh sau sẽ

sử dụng phơng thức truy nhập này

SELECT * FROM NhânViên WHERE MãNhânViên = 7900;

5.5 Kết nối Cluster (Cluster join)

Phơng thức này sẵn dùng khi mà điều kiện kết nối các bảng đều đợc chứa trongcùng một nhóm (Cluster) và nếu điều kiện kết nối trong mệnh đề FROM thoả mãnmỗi cột trong kết nối là khoá của bảng này và là cột trong bảng kia Và để sử dụng

đợc khoá của kết nối thì các điều kiện phải nối với nhau bởi toán tử AND Lúc đóOracle sẽ tiến hành hoàn thành câu lệnh Nested-Loop

VD: SELECT * FROM NhânViên, Phòng WHERE NhânViên.MãPhòng = Phòng.MãPhòng;

5.6 Khoá của các hàng có cùng giá trị băm

Câu lệnh phải có mệnh đề FROM sử dụng tất cả các cột trong khoá của hàmbăm Mặt khác để dùng đợc khoá của hàm băm thì các điều kiện tơng ứng phải kếtnối với nhau bằng toán tử AND Oracle sẽ tiến hành duyệt bảng dựa trên khoá hàmbăm tìm đợc

VD: Giả sử rằng trong bảng HoáĐơn và bảng NộiDungHoáĐơn đợc lu trongmột nhóm hàm băm và SốHoáĐơn vừa là khoá chính vừa là khoá hàm băm Câulệnh sau sẽ sử dụng phơng thức hàm băm

SELECT * FROM NộiDungHoáĐơn WHERE SốHoáĐơn = 65118968;

5.7 Khoá của các hàng có cùng giá trị Index

Khi mà các bảng đợc Index thì cùng với giá trị của trờng Index còn có các

ROWID Nếu câu lệnh chỉ sử dụng giá trị các trờng Index thì các giá trị này sẽ đợclấy trực tiếp từ bảng Index thay vì lấy từ bảng dữ liệu còn trong trờng hợp là cácgiá trị khác thì sẽ truy nhập ROWID tìm đợc từ bảng Index

VD: Giả sử trong bảng NhânViên thì MãPhòng đã đợc Index

SELECT * FROM NhânViên WHERE MãPhòng=10;

5.8 Index phối hợp

Khi có câu lệnh có sử dụng nhiều cột đợc Index phối hợp và trong mệnh đề

FROM và các điều kiện này đợc liên kết với nhau bằng toán tử AND Oracle sẽ tiếnhành duyệt trên các vùng Index để tìm ra các ROWID , từ đó có thể truy nhập đếncác hàng tơng ứng

Trang 30

VD: Giả sử cột Nghề và MãPhòng đợc Index phối hợp Câu lệnh sau sẽ sửdụng Index phối hợp.

SELECT * FROM NhânViên WHERE Nghề = 'Th kí' AND MãPhòng = 10;

5.9 Sử dụng Index đơn

Khi câu lệnh sử dụng các cột của Index đơn thì Oracle sẽ tiến hành tìm ra các

ROWID truy nhập đến các hàng tơng ứng

VD: Giả sử trong bảng NhânViên cột Nghề đã đợc Index

SELECT * FROM NhânViên WHERE Nghề = 'Th kí';

Nếu nh câu lệnh có sử dụng nhiều cột Index đơn thì Oracle sẽ lấy giao của tậphợp các ROWID nhận đợc khi duyệt các Index theo điều kiện Từ tập hợp chung nàyOracle mới tiến hành truy nhập đến các hàng tơng ứng

VD: Trong bảng NhânViên thì cột Nghề và MãPhòng đợc Index đơn

SELECT * FROM NhânViên WHERE Nghề = 'Phân tích viên' AND MãPhòng = 20;

5.10 Giới hạn tập hợp Index (Index Range Scan)

Phơng thức này đợc sử dụng khi trong câu lệnh có chứa điều kiện giới hạn cácIndex đơn hoặc thành phần đứng trớc trong Index nhiều cột có dạng nh sau

<tên cột> = <biểu thức>

<tên cột > >[=] <biểu thức> AND <tên cột> <[=] <biểu thức>

<tên cột> BETWEEN <biểu thức> AND <biểu thức>

<tên cột> LIKE 'c%'

Nếu nh câu lệnh có tham chiếu tới cột Index thì phơng thức truy nhập nàykhông đợc sử dụng

VD: Giả sử cột Lơng trong bảng NhânViên là một Index, các câu lệnh sau sẽ

sử dụng phơng thức duyệt dựa trên giới hạn của Index

SELECT * FROM NhânViên WHERE Lơng BETWEEN 2000 AND 3000;

SELECT * FROM NhânViên WHERE TênNhânViên LIKE 'S%';

Trang 31

SELECT * FROM NhânViên WHERE Lơng > 2000;

Ví dụ trong trờng hợp Index trên nhiều trờng:

Giả sử có Index trên MãHoáĐơn và DòngHoáĐơn của bảng NộiDungHoáĐơn

SELECT * FROM NộiDungHoáĐơn WHERE MãHoáĐơn > 65118968;

Do MãHoáĐơn là phần đứng trớc trong Index nhiều cột nên phơng thức truynhập này đợc sử dụng Tuy nhiên câu lệnh sau đây vì DòngHoáĐơn là thành phần

đứng sau trong Index nhiều cột nên phơng thức truy nhập này không đợc sử dụng

SELECT * FROM NộiDungHoáĐơn WHERE DòngHoáĐơn <4;

5.12 Sắp xếp kết nối

Nếu câu lệnh đòi hỏi kết nối giữa các bảng trong cùng một nhóm hoặc nếu

điều kiện trong mệnh đề FROM sử dụng một cột từ một bảng khác trong điều kiện

t-ơng ứng Oracle cũng có thể sử câu lệnh SELECT đệ qui để thực hiện câu lệnh kếtnối

VD khi bảng NhânViên và bảng Phòng không nằm trong cùng một Cluster

SELECT * FROM NhânViên, Phòng WHERE NhânViên.MãPhòng = Phòng.MãPhòng;

Phơng thức này có thể đợc dùng nếu các điều kiện sau thoả mãn

 Câu lệnh sử dụng hàm MAX hoặc MIN để chọn giá trị của các cột Index đơnhoặc các cột là phần đầu của Index phức Các kiểu Index này không đợc phép làCluster Index (chỉ mục phân lớp)

 Không có biểu thức khác trong danh sách chọn

 Câu lệnh không chứa mệnh đề FROM hay mệnh đề GROUP BY

Oracle sẽ tiến hành thực hiện tìm có khoanh vùng đối với Index để tìm giá trị

MAX hoặc MIN Khi mà chỉ có giá trị đợc chọn thì Oracle cũng không cần thiết truyxuất đến bảng dữ liệu nữa

Phơng thức truy nhập này đợc thực hiện khi mà các điều kiện sau thoả mãn:

 Câu lệnh chứa mệnh đề ORDER BY sử dụng cột Index đơn hoặc phần đầutrong Index phức Kiểu Index này không thể là một Cluster Index

 Đảm bảo phải có ít nhất một cột là khoá chính hoặc cột có giá trị NOT NULL trong các cột có mặt ở mệnh đề ORDER BY

 Tham số NSL_SORT đợc đặt giá trị là BINARY

Oracle sẽ thực hiện lọc ra vùng tìm kiếm trong Index để lấy ra các ROWID rồitruy nhập bằng ROWID

Trang 32

VD: Giả sử MãNhânViên là khoá chính của bảng nhân viên.

SELECT * FROM NhânViên ORDER BY MãNhânViên;

5.15 Duyệt toàn bộ

Bất kì câu lệnh nào cũng có thể sử dụng phơng thức truy nhập này mà khôngcần quan tâm đến điều kiện sau mệnh đề WHERE

VD: SELECT * FROM NhânViên;

Chú ý: Các điều kiện sau cũng không tạo ra phơng thức truy nhập bằng Index

 NOT EXISTS subquery

 Bất kì điều kiện nào đối với một cột cha đợc Index.

Các câu lệnh có chứa cấu trúc nh vậy và không có cấu trúc khác để có thể tạophơng thức truy nhập bằng Index thì buộc phải duyệt toàn bộ

6 Các luật tối u

Có hai luật tối u trong Oracle là luật tối u cơ bản và luật tối u ớc lợng giá

6.1 Luật tối u cơ bản (rule-based)

Nội dung cơ bản của luật này là chọn ra cách thức truy nhập tới hàng dựa trênmức độ u tiên của các phơng thức

Trớc tiên Oracle sẽ kiểm tra điều kiện sau mệnh đề WHERE của câu lệnh để xác

định những phơng thức nào câu lệnh có thể sử dụng đợc Tiếp đó Oracle sẽ tiếnhành chọn ra phơng thức có số thứ tự thấp nhất trong bảng các phơng thức Chú ýrằng phơng thức duyệt toàn bộ là phơng thức đứng cuối bảng cho nên Oracle sẽchọn phơng thức truy nhập có Index nếu có cho dù duyệt toàn bộ có thể nhanh hơn

và thứ tự các điều kiện trong mệnh đề WHERE nói chung sẽ không ảnh hởng tớicách chọn phơng thức truy nhập

Trang 33

Giả sử có bảng NhânViên có những ràng buộc sau:

+ Khoá chính là MãNhânViên và Index tơng ứng là PK_MANHANVIEN.

+Có Index tên là TENNHANVIEN_IND trên cột TênNhânViên.

+Có Index tên là LUONG_IND trên cột Lơng.

Để chọn ra những mã nhân viên có tên là 'CHUNG' và có lơng > 2000 bằngcâu lệnh sau:

SELECT MãNhânViên FROM NhânViên WHERE TênNhânViên='CHUNG' AND Lơng>2000;

Dựa vào các điều kiện trong mệnh đề WHERE của câu lệnh SQL và các ràngbuộc, các Index thì các phơng truy nhập sau có thể dùng đợc:

+ Chọn ra một hàng bằng Index khi sử dụng TENNHANVIEN_IND do điều kiện TênNhânViên='CHUNG' Phơng thức này có số thứ tự là 9.

+ Duyệt Index không bị giới hạn khi sử dụng LUONG_IND Phơng thức này có số thứ tự là 11.

+ Duyệt toàn bộ do phơng thức này sẵn dùng cho mọi bảng.

Theo luật tối u Rule-based thì Oracle sẽ tiến hành truy nhập theo phơng pháp sửdụng Index TENNHANVIEN_IND

6.2 Luật tối u ớc lợng giá (Cost-based)

Mỗi cách truy nhập khi thi hành sẽ tơng ứng một phân tích có “giá” (cost) nào

đó, giá này xác định dựa trên tài nguyên máy tính nh truy xuất I/O, thời gian CPU,

bộ nhớ

Nội dung cơ bản của luật này là chọn ra cách thực hiện câu lệnh mà phải trảgiá ít nhất dựa trên các thông tin về trạng thái của hệ thống và của dữ liệu Cácthông tin về trạng thái có thể tìm thấy trong từ điển dữ liệu và thờng sẽ quan tâm

đến các thông tin sau:

 Độ lớn của quan hệ R: U R

 Số lợng giá trị thuộc tính A trong quan hệ R: U(A,R).

 Số lợng các trang bộ nhớ để chứa quan hệ R còn rỗi: P R

 Số lợng dòng (row) tơng ứng với một trang 1 trang: b R

 Số lợng các trang bộ nhớ RAM vật lý còn rỗi: M

 Mức Index thuộc tính trong quan hệ R, đối với CSDL Oracle là “B-Tree”

Trớc tiên Oracle sẽ xác định cách thức truy nhập nào có thể dùng đợc bằngcách kiểm tra điều kiện trong mệnh đề WHERE Tiếp đó Oracle sẽ định giá mỗi cáchtruy nhập dựa trên đặc điểm của dữ liệu nh trạng thái Storage, các Table, các Index,Cluster trong từ điển dữ liệu (Data Dictionary)

Bộ tối u hoá cũng quan tâm đến các nhân tố sau đây khi chọn phơng thức truynhập:

Trang 34

 Tính chọn lọc: là số phần trăm các hàng đợc chọn ra trong bảng bởi câulệnh Nếu nh câu lệnh chọn ra một số phần trăm nhỏ của bảng thì đợc gọi là tínhchọn lọc cao, còn nếu câu lệnh chọn ra một số lợng hàng lớn từ bảng thì đợc gọi

là tính chọn lọc thấp

Oracle thờng chọn ra đợc cách truy nhập chính xác cho các câu lệnh có tínhchọn lọc cao hơn là những câu lệnh có tính chọn lọc thấp Thông thờng thì nhữngcách truy nhập thông qua Index là nhanh đối với các câu lệnh có tính chọn lọc cao,tuy nhiên phơng thức duyệt toàn bộ lại thực hiện nhanh hơn đối với câu lệnh cótính chọn lọc thấp

Tính chọn lọc của một câu lệnh đợc xác định thông qua các điều kiện sau:

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

 Khoá duy nhất hoặc khoá chính đợc sử dụng trong mệnh đề WHERE

 Trạng thái của các bảng

Những ví dụ trong phần minh hoạ sẽ làm rõ cách thức sử dụng tính chọn lọc

 Tham số DB_FILE_MULTIBLOCK_READ_COUNT: Duyệt toàn bộ thờng sử dụng đọc

đa khối (multi-block), vì vậy giá phải trả với duyệt toàn bộ là số lợng của đa khốicần đọc, đòi hỏi để đọc toàn bộ bảng tức là số các khối đơn để đọc tơng ứng vớimột đa khối mà giá trị này đợc xác định bởi tham số

DB_FILE_MULTIBLOCK_READ_COUNT Vì lý do đó nên Oracle thờng chọn duyệt toàn bộkhi mà giá trị của tham số này cao

VD: Câu lệnh sau sử dụng điều kiện bằng trong mệnh đề WHERE để chọn ra tấtcả những nhân viên có tên là Chung:

SELECT * FROM NhânViên WHERE TênNhânViên='Chung';

Nếu TênNhânViên là một khoá duy nhất hay là một khoá chính thì Oracle sẽxác định đợc chỉ có một hàng có TênNhânViên là Chung và câu lệnh cũng chỉ trảlại có một hàng do đó Oracle rất chính xác khi chọn phơng thức truy nhập duyệt giátrị duy nhất trên Index ràng buộc bởi khoá duy nhất hay khoá chính (phơng thứcnày có số thứ tự trong bảng là 4)

Quay trở lại ví dụ trên, nếu nh TênNhânViên không phải là một khoá duy nhấthay là một khoá chính thì Oracle có thể đánh giá tính chọn lọc của câu lệnh dựatrên thông tin từ:

Tham số USER_TAB_COLUMNS.NUM_DISTINCT: Số lợng tập giá trị khác nhau chomỗi cột

Tham số USER_TABLES.NUM_ROWS: Số lợng cột trong mỗi bảng

Bằng cách chia số lợng hàng của bảng NhânViên cho số lợng các giá trị khácnhau của cột TênNhânViên, Oracle sẽ ớc lợng đợc số nhân viên cùng tên Với giảthiết các giá trị của tên nhân viên là đồng đều nên Oracle sử dụng số phần trăm này

để xác định tính chọn lọc của câu lệnh

Ví dụ 1: SELECT * FROM NhânViên WHERE MãNhânViên < 7500;

Trang 35

Để đánh giá tính chọn lọc của câu lệnh, Oracle lấy giá trị giới hạn là 7500 từcâu lệnh kết hợp với giá trị HIGH_VALUE và LOW_VALUE ứng với cột MãNhânViêntrong USER_TAB_COLUMNS View Oracle giả sử rằng mọi giá trị của MãNhânViên đợcphân bố đều giữa giá trị cao nhất và giá trị thấp nhất do đó sẽ ớc lợng đợc số phầntrăm hàng đợc lấy ra (cũng nh đánh giá đợc tính chọn lọc của câu lệnh).

Ví dụ 2: SELECT * FROM NhânViên WHERE MãNhânViên < :e1;

Bộ tối u hoá không biết giá trị của biến cục bộ e1 Thực tế thì giá trị của e1 cóthể khác nhau với mỗi lần thực hiện câu lệnh Chính vì lý do này mà Oracle có thể

sử dụng cách thức đã mô tả ở ví dụ trên để xác định tính chọn lọc của câu lệnh.Trong trờng hợp này Oracle đa ra phỏng đoán là giá cột nhận giá trị nhỏ để xác

định tính chọn lọc (bởi vì cột đợc Index)

SELECT * FROM NhânViên WHERE MãNhânViên>=7500 AND MãNhânViên<=7800;

Oracle sẽ đánh giá tính chọn lọc dựa vào hai câu lệnh có điều kiện sau:

đệm lu trữ càng lớn thì xác suất tìm thấy câu lệnh trong bộ đệm là càng cao Tuynhiên kích thớc của bộ đệm cũng không thể lớn quá phần bộ nhớ RAM vật lý cònrảnh vì nếu vợt quá sẽ gây ra việc tráo đổi bộ nhớ ra đĩa, đây là hiệu ứng khôngmong muốn vì nó sẽ làm chậm tốc độ thực hiện chơng trình

Phân tích cách thực hiện một câu lệnh SQL cụ thể và xây dựng cây phân tích.Giả sử có các bảng NhânViên chứa các thông tin về NhânViên nh Lơng, Nghề,Tên, MãPhòng v.v và bảng Phòng chứa MãPhòng và TênPhòng để liên kết vớibảng NhânViên

Giả sử có câu lệnh SQL sau:

Trang 36

Truy nhập bảng (Duyệt toàn bộ) NhânViên

3

Truy nhập Index (Khóa duy nhất) pk_maphong

5

Sơ đồ cách thực hiện câu lệnh SQL trong ORACLE

Truy nhập bảng (Bằng ROWID) Phòng

4

Bộ lọc 1

Nested-loop

2

Truy nhập bảng (Duyệt toàn bộ) BậcL ơng

6

Trong sơ đồ này thì mỗi khối ứng với một bớc thực hiện và con số trong khốichỉ thứ tự đợc thực hiện của khỗi Mỗi khối sẽ lấy dữ liệu từ khối khác (màu trắng)hoặc trực tiếp từ dữ liệu trên đĩa (màu đen) Sau khi dữ liệu đợc xử lý ở mỗi khốithì sẽ trả lại một tập hợp các hàng (đợc gọi là nguồn dữ liệu Row Source) cho khối

ở mức trên và nếu là khối trên cùng thì sẽ trả lại cho ngời dùng hoặc chơng trìnhthực hiện câu lệnh

Theo sơ đồ trên, Oracle sẽ thực hiện bớc 3 và trả lại từng dòng một cho bớc 2.Tơng ứng với mỗi dòng ở bớc 3 Oracle thực hiện các công việc sau:

- Oracle thực hiện bớc 5 và trả lại ROWID cho bớc 4

- Oracle thực hiện bớc 4 trả lại giá trị hàng cho bớc 2

- Oracle thực hiện bớc 2 bằng cách lấy mỗi hàng ở bớc 3 và một hàng ở bớc 4ghép thành một và trả lại kết quả cho bớc 1

- Oracle sẽ thực hiện bớc 6 và sẽ trả lại các hàng cho bớc 1 nếu có

Trang 37

- Để thực hiện bớc 1, Oracle sẽ kiểm tra ở bớc 6 có trả lại hàng nào không, nếu

có thì Oracle sẽ trả lại hàng từ bớc 2 cho ngời dùng

Chú ý rằng ứng với mỗi hàng trả lại ở bớc 3 thì Oracle sẽ phải một lần thực hiệnbớc 5, 4, 2, 6, 1 Với các bớc mà chỉ đòi hỏi một dòng từ các nhánh con trong câyphân tích thì rất tốt bởi vì Oracle có thể tiến hành thực hiện bớc đó ngay và nh vậycây lệnh sẽ đợc thu gọn lại từng thời điểm Nói chung thì các bớc chỉ yêu cầu truynhập một hàng từ bảng là truy nhập duy nhất trực tiếp từ bảng, từ Index, từ kết nốiNested-Loop và từ bộ lọc còn các bớc yêu cầu tất cả các hàng hàng đồng thời làsắp xếp, kết nối bằng sắp xếp trộn, các hàm làm việc với nhóm hàng và phép hợpcác tập hợp

Dựa trên cây phân tích lệnh có thể đánh giá hoặc sắp xếp lại câu lệnh để chọn

ra cách thức thực hiện tối u Ngoài ra cũng có thể chuyển cây phân tích này cácchú giải nh sau:

STT (ID) Thao tác (Operation) Tuỳ chọn (Option) Đối tợng tác động (Object-name)

5 Truy nhập bảng Bằng khoá duy nhất PK_MAPHONG

6 Truy nhập bảng Bằng duyệt toàn bộ BậcLơng

Các chú giải này có thể đợc liệt kê ra bởi Oracle bằng cách sử dụng lệnh

EXPLAIN PLAN để mỗi khi thực hiện câu lệnh thì Oracle sẽ đa ra các chú giải về câyphân tích đợc thực hiện

C Các bớc tối u hoá

Có thể tối u hoá ở mức ứng dụng bằng cách xây dựng các bảng, lựa chọn giảipháp Index, các View thích hợp Sau đó sẽ tối u ở mức câu lệnh bằng cách thay đổilại câu lệnh để nó đợc thực hiện có hiệu quả hơn Mặc dù Oracle có thể hỗ trợ choviệc tối u câu lệnh nhng tuy nhiên Oracle không thể biết về đặc điểm dữ liệu cũng

nh về ngữ nghĩa câu lệnh bằng những ngời phát triển phần mềm Do vậy phát triểnphần mềm sẽ phải tự tiến hành tối u câu lệnh để cho nó đợc hoàn thiện hơn

Với bất kì một câu lệnh SQL nào đợc thực hiện bởi Oracle thì bộ tối u hoá sẽlàm các công việc sau:

 Định trị các biểu thức và điều kiện: Oracle sẽ tiến hành tính toán các biểuthức và điều kiện thành các giá trị hằng một cách tối đa

 Chuyển đổi câu lệnh: Với những câu lệnh phức tạp thì Oracle sẽ tiến hànhchuyển thành sự kết hợp của các câu lệnh đơn giản hơn, ví dụ nh câu hỏi có sửdụng Query bộ phận (subquery) thì sẽ đợc chuyển thành kết nối của hai câu hỏi t-

ơng đơng nếu có thể

 Kết hợp View vào trong câu lệnh: View thực chất là một câu lệnh SELECT,

do vậy nếu thực hiện một câu lệnh SELECT trên View thì dữ liệu sẽ bị duyệt hai lần.Nếu kết hợp View và câu lệnh SELECT thì sẽ chỉ phải duyệt một lần

 Chọn cách tối u hoá: Chọn cách tối u dựa trên luật Rule-based hoặc based

Trang 38

Cost- Chọn phơng thức truy nhập: Chọn cách truy nhập nhanh nhất tới hàng củabảng nếu có nhiều cách truy nhập.

 Chọn thứ tự của kết nối: Nếu câu lệnh sử dụng kết nối nhiều hơn hai bảngthì Oracle sẽ tiến hành tìm ra cặp kết nối thứ nhất, rồi cặp tiếp theo v.v

 Chọn thao tác kết nối: Với bất kì câu lệnh nào thì cũng cần phải có mộtthao tác để thực hiện phép kết nối

1 Định giá biểu thức hoặc điều kiện

1.1 Chuyển thành các hằng số (Consts)

Bằng cách định giá các biểu thức thành hằng số một cách tối đa thì câu lệnhSQL sẽ đợc thực hiện nhanh hơn Điều này là hiển nhiên bởi vì nếu định giá mộtbiểu thức thì chỉ làm có một lần trong khi nếu câu lệnh cũ thì biểu thức đó sẽ đợcthực hiện trong suốt quá trình duyệt Ví dụ sau sẽ làm rõ điều này Giả sử cần đa raTênNhânViên của những ngời có Lơng>2000$ trong bảng NhânViên, có thể thựchiện một trong ba câu lệnh sau:

SELECT TênNhânViên, Lơng FROM NhânViên WHERE Lơng>20,000/10;

SELECT TênNhânViên, Lơng FROM NhânViên WHERE Lơng>2,000;

SELECT TênNhânViên, Lơng FROM NhânViên WHERE Lơng*10>20,000;

Rõ ràng cả ba câu lệnh đều trả lại cùng một kết quả tuy nhiên câu lệnh thứnhất và thứ ba phải thêm một phép tính để ứng với mỗi phép so sánh so với câulệnh thứ hai Oracle sẽ tự động chuyển câu lệnh thứ nhất trở thành câu lệnh thứ haicòn câu lệnh thứ ba thì không đơn giản đối với Oracle để thành câu lệnh thứ hai.Chính vì lý do này mà những ngời phát triển phần mềm nên tự chuyển điều kiện sosánh thành dạng một cột với một hằng số trong bất kì trờng hợp nào có thể hơn làmột điều kiện trong đó có chứa một biểu thức với một cột

Oracle sẽ chuyển các điều kiện đơn giản sử dụng toán tử so sánh LIKE không sửdụng kí tự đại diện thành một biểu thức so sánh bằng Ví dụ, Oracle sẽ chuyển biểuthức thứ nhất thành biểu thức thứ hai:

Chuyển biểu thức: TênNhânViên LIKE 'SMITH'

thành biểu thức tơng đơng: TênNhânViên = 'SMITH'

Các biểu thức kiểu này chỉ đợc chuyển khi mà biểu thức so sánh với các biến

có kích thớc (size) không cố định Nếu nh TênNhânViên có kiểu CHAR(10) thìbiểu thức trên không đợc chuyển vì TênNhânViên có kích thớc cố định

Oracle sẽ chuyển các biểu thức có chứa toán tử so sánh IN thành các điều kiện

so sánh bằng liên kết với nhau bởi toán tử logic OR

Ví dụ:

Chuyển biểu thức: TênNhânViên IN ('SMITH','KING','JONES')

Trang 39

thành: TênNhânViên='SMITH' OR TênNhânViên='KING' OR TênNhânViên='JONES'

Các biểu thức điều kiện sẽ đợc chuyển thành các điều kiện so sánh liên kết vớinhau bởi toán tử OR Các điều kiện sử dụng ANY hoặc SOME kèm theo một subquery

sẽ chuyển thành toán tử EXITST và một query liên quan

Ví dụ: Lơng>ALL(:Lơng1, :Lơng2)

thành Lơng> :Lơng1 AND Lơng > :Lơng2

Từ x>ALL ( SELECT Lơng FROM NhânViên WHERE MãPhòng=10;

thành NOT (x<= ANY ( SELECT Lơng FROM NhânViên WHERE MãPhòng=10))

và sau đó sẽ sử dụng luật áp dụng với toán tử ANY thành câu lệnh sau:

NOT EXISTS ( SELECT Lơng FROM NhânViên WHERE MãPhòng=10 AND x<= Lơng)

Oracle sẽ luôn chuyển điều kiện có toán tử NOT thành một điều kiện đối với nó

Ví dụ: Chuyển biểu thức:

NOT MãPhòng = ( SELECT MãPhòng FROM NhânViên WHERE TênNhânViên='TAYLOR')

thành biểu thức tơng đơng:

MãPhòng <> ( SELECT MãPhòng FROM NhânViên WHERE TênNhânViên='TAYLOR')

Trang 40

Thông thờng một điều kiện có chứa toán tử NOT thờng có nhiều cách viết.Oracle chấp nhận việc chuyển đổi những điều kiện nh vậy thành những điều kiệnphủ định thành phần, thậm chí ngay cả việc kết quả có chứa nhiều NOT hơn.

Ví dụ các biểu thức sau chứa toán tử NOT có nghĩa tơng đơng:

NOT ( Lơng<1,000 OR Thởng IS NULL)

NOT Lơng<1,000 AND Thởng IS NOT NULL

Lơng>=1,000 AND Thởng IS NOT NULL

1.8 Chuyển tiếp

Nếu hai điều kiện trong cùng một mệnh đề WHERE có sử dụng một cột chungthì Oracle đôi khi có thể chuyển thành giá trị cơ bản Điều này có khả năng làmcho truy nhập bằng Index có thể sử dụng trong câu lệnh mới nhng lại không sửdụng đợc trong câu lệnh cũ

Các điều kiện đó có dạng: WHERE Cột1 <toán tử> <hằng số> AND Cột1=Cột2

đợc chuyển thành: WHERE Cột1 <toán tử> <hằng số> AND Cột2 <toán tử> <hằng số>

Trong đó <toán tử > có thể là: =,!=, ^=, <, <>, >,<=, >=

Hằng số là bất kì giá trị hằng nào với toán tử, hàm SQL, kí tự, biến kết hợphoặc biến

Ví dụ câu lệnh:

SELECT * FROM NhânViên, Phòng

WHERE NhânViên.MãPhòng=20 AND NhânViên.MãPhòng=Phòng.MãPhòng

đợc chuyển thành câu lệnh có nghĩa tơng đơng:

SELECT * FROM NhânViên, Phòng

WHERE NhânViên.MãPhòng=20 AND Phòng.MãPhòng=20;

Chú ý rằng dạng điều kiện sau sẽ không đợc chuyển:

WHERE Cột1 <toán tử> Cột3 AND Cột1=Cột2 thành điều kiện Cột2 <toán tử> Cột3.

Cách thức này cũng chỉ đợc dùng trong tối u dựa vào luật Cost-based

2 Chuyển dạng câu lệnh

Do SQL là một ngôn ngữ thao tác dữ liệu mềm dẻo nên thờng có nhiều câulệnh mà có thể có công thức tối u hoá thành công Đôi khi thì Oracle sẽ chuyển mộtcâu lệnh thành câu lệnh tơng đơng có hiệu quả hơn Trong phần này sẽ thảo luận

về những dạng câu lệnh có thể tạo ra:

+ Chuyển những câu lệnh chứa OR thành những câu lệnh ghép nối với nhaubằng UNION ALL

+ Chuyển các câu lệnh phức hợp thành câu lệnh kết nối

Ngày đăng: 22/08/2012, 09:53

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Nhập môn cơ sở dữ liệu quan hệ , Tác giả Lê Tiến Vơng, NXB KH và KT Khác
2. Phân tích và thiết kế tin học hệ thống Quản lý-Kinh doanh-Nghiệp vụ, NXB Giao thông vận tải Khác
3. Oracle Corp: Introduction to Oracle: SQL, SQL*Plus and PL/SQL, Couse Note - 1992 Khác
4. Oracle Server Turning Part No. A32537-1 Printed in the U.S.A June, 1996 5. Participant guide: Administer the Oracle Database Part No. A32535-1 Printed in the U.S.A February 1996 Khác
6. Oracle 7 Server - Concepts Part No. A32534-1 Printed in the U.S.A February 1996 Khác

HÌNH ẢNH LIÊN QUAN

Sơ đồ thuộc tính quan hệ phụ thuộc bắc cầu - Phân tích và tối ưu hóa câu lệnh SQL
Sơ đồ thu ộc tính quan hệ phụ thuộc bắc cầu (Trang 12)
Sơ đồ tổng thể CSDL phân tán của ORACLE - Phân tích và tối ưu hóa câu lệnh SQL
Sơ đồ t ổng thể CSDL phân tán của ORACLE (Trang 20)
Bảng NhânViên - Phân tích và tối ưu hóa câu lệnh SQL
ng NhânViên (Trang 27)
Sơ đồ cách thực hiện câu lệnh SQL trong ORACLE - Phân tích và tối ưu hóa câu lệnh SQL
Sơ đồ c ách thực hiện câu lệnh SQL trong ORACLE (Trang 41)
Sơ đồ minh hoạ xây dựng lại thực thể - Phân tích và tối ưu hóa câu lệnh SQL
Sơ đồ minh hoạ xây dựng lại thực thể (Trang 53)
Bảng NhânViên Cluster chứa bảng NhânViên - Phân tích và tối ưu hóa câu lệnh SQL
ng NhânViên Cluster chứa bảng NhânViên (Trang 57)
Hình thức phạt - Phân tích và tối ưu hóa câu lệnh SQL
Hình th ức phạt (Trang 66)
Sơ đồ chức năng của phân hệ II - Phân tích và tối ưu hóa câu lệnh SQL
Sơ đồ ch ức năng của phân hệ II (Trang 67)
Sơ đồ chức năng của phân hệ III - Phân tích và tối ưu hóa câu lệnh SQL
Sơ đồ ch ức năng của phân hệ III (Trang 68)
Bảng kê trạng thái - Phân tích và tối ưu hóa câu lệnh SQL
Bảng k ê trạng thái (Trang 69)
Bảng so sánh thời gian thực hiện câu lệnh trớc và sau khi tạo Index - Phân tích và tối ưu hóa câu lệnh SQL
Bảng so sánh thời gian thực hiện câu lệnh trớc và sau khi tạo Index (Trang 74)
Bảng so sánh thời gian thực hiện câu lệnh trớc và sau khi tạo Index - Phân tích và tối ưu hóa câu lệnh SQL
Bảng so sánh thời gian thực hiện câu lệnh trớc và sau khi tạo Index (Trang 75)
Sơ đồ thực thể của phần mềm Tra cứu Văn bản pháp qui - Phân tích và tối ưu hóa câu lệnh SQL
Sơ đồ th ực thể của phần mềm Tra cứu Văn bản pháp qui (Trang 84)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w