You are on page 1of 16

Bài 4.

Tối ưu hoá câu lệnh truy vấn


- Mục đích, yêu cầu: Cung cấp cho sinh viên phương pháp biển đổi các câu lệnh
truy vấn nhằm tiết kiệm chi phí và bộ nhớ khi thực hiện truy vấn
- Hình thức tổ chức dạy học: Lý thuyết, tự học
- Thời gian: Lý thuyết( trên lớp: 2; online: 2) Tự học, tự nghiên cứu: 8
- Nội dung chính:
1. Vì sao cần tối ưu hoá
Ví dụ: Cho CSDL sau
S S# STen DC SP S# P# KL
S1 Hùng HN S1 P1 3
S2 Lan HN S2 P1 3
S3 P2 2

P P# PTen Mau TK
P1 A Đ 12
P2 B X 17
P3 C V 17

Hình 1Các bảng S, P và SP của CSDL quan hệ


S#: số hiệu hãng, Sten: tên hãng, DC: địa chỉ hãng
P#: số hiệu sản phẩm, Pten: tên sản phẩm, Mau: màu, TK: tồn kho
Trong CSDL trên tìm các số hiệu hãng (S#) cung ứng ít nhất một mặt hàng màu
đỏ. Trả lời bằng đại số quan hệ:
Cách 1: ΠS#(σSP.P#=P.P#(σMau='Đ'(SPxP)))
R1 = SP x P P# PTen Mau TK S# P# KL
P1 A Đ 12 S1 P1 3
P2 B X 17 S1 P1 3
P3 C V 17 S1 P1 3
P1 A Đ 12 S2 P1 3
P2 B X 17 S2 P1 3
P3 C V 17 S2 P1 3
P1 A Đ 12 S3 P2 2
P2 B X 17 S3 P2 2
P3 C V 17 S3 P2 2

Bảng 1: Bảng kết quả của phép tích đề các giữa SP và P

R2 = σMau='Đ'(R1) P# PTen Mau TK S# P# KL


P1 A Đ 12 S1 P1 3
P1 A Đ 12 S2 P1 3
P1 A Đ 12 S3 P2 2

Bảng 2: Bảng kết quả của phép chọn từ bảng R1

R3 =σSP.P#=P.P# (R2) P# PTen Mau TK S# P# KL


P1 A Đ 12 S1 P1 3
P1 A Đ 12 S2 P1 3

Bảng 3: Bảng kết quả của phép chọn từ quan hệ R2

Kết quả =ΠS# (R3) S#


S1
S2
Bảng 4: Bảng kết quả của phép chiếu S# trong quan hệ R3

Cách 2: ΠS# (SP*(σMau=' 'Đ'(P)))


V1= σMau='Đ'(P) P# PTen Mau TK
P1 A Đ 12

Bảng 5: Bảng V1- kết quả của phép chọn

V2= SP * V1 P# PTen Mau TK S# KL


P1 A Đ 12 S1 3
P1 A Đ 12 S2 3

Bảng 6: Bảng V2- kết quả của phép nối V1 với SP

Kết quả =ΠS# (V2) S#


S1
S2

Bảng 7: Bảng kết quả của phép chiếu S# trên V2

Nhận xét: Cách 1 tốn kém bộ nhớ và tốn thời gian thực hiện hơn cách 2.
Biến đổi hợp lý các câu hỏi để giảm bớt chi phí trong truy vấn dữ liệu đó là mục
đích của tối ưu hoá câu hỏi.
Các quan hệ càng nhỏ thì chi phí thời gian thực hiện và miền nhớ càng thấp. Quan
hệ có thể nhỏ theo hai kích thước hẹp ngang (ít thuộc tính) và ngắn (ít bộ). Trong
các phép toán quan hệ thì phép chiếu và phép chọn có khả năng giảm kích thước
ngang và dọc của các quan hệ. Phép kết nối thường làm tăng kích thước của các
quan hệ. Theo ví dụ trên ta thấy rằng trình tự thực hiện các phép tính đóng một
vai trò quan trọng trong quá trình tổ chức câu hỏi.
2. Các chiến lược tối ưu
Đẩy phép chọn và phép chiếu xuống thực hiện sớm nhất có thể được
Nhóm một dãy các phép toán một ngôi (chọn, chiếu)
Tổ hợp phép chọn và phép tích đề các thành phép kết nối
σF(r x s) = = r  s
Xác định các biểu thức con chung
Chẳng hạn: F = F1 x F2 + F1 x F3 = F1 x (F2 + F3)
Xử lý các tệp trước khi tính toán
Chẳng hạn: trước khi thực hiện
r  s sắp xếp hay r theo A, s theo B
A=B
Lựa chọn thứ tự thực hiện các phép toán sao cho chi phí thấp nhất
Cố gắng giảm bớt bề ngang của quan hệ bằng phép chiếu nếu có thể.
Ví dụ 2 : ΠDC(σSTen='Lan'(S)*SP)
Trong SP chỉ cần giữ lại thuộc tính S# để kết nối
Trong S chỉ cần hai thuộc tính S# để kết nối và DC để lấy thông tin
Vì vậy ta có thể sử dụng phép chiếu để giảm bớt bề ngang của quan hệ. Biểu thức
sau được tối ưu thành ΠDC(ΠDC,S#(σSTen='Lan'(S))*ΠS#(SP))
3. Các biểu thức tương đương
3. 1. Quy tắc giao hoán của phép kết nối
E1 * E2 = E2 * E1
Ví dụ 3:
S * SP S# STen DC P# KL
S1 Hùng HN P1 3
S2 Lan HT P1 3

SP * S S# STen DC P# KL
S1 Hùng HN P1 3
S2 Lan HT P1 3

Hình 8: Thực hiện qui tắc giao hoán

3. 2. Quy tắc kết hợp của phép kết nối


Nếu E2 có chứa thuộc tính để kết nối với E1 và E3 thì (E1* E2 ) *E3 = E1 * (E2
* E3)
Ví dụ 4:
Xét ( S * SP) *P ta có
S * SP S# STen DC P# KL
S1 Hùng HN P1 3
S2 Lan HT P1 3

Bảng 10: Bảng kết quả của phép nối S và SP

(S*SP) * P S# STen DC P# KL PTen Mau TK


S1 Hùng HN P1 3 A Đ 12
S2 Lan HT P1 3 A Đ 12

Bảng 15: Bảng kết quả của phép nối (S và SP) và


Xét S * (SP * P) ta có
P
SP *P S# P# KL PTen Mau TK
S1 P1 3 A Đ 12
S2 P1 3 A Đ 12
S3 P2 2 B X 17

Bảng 16: Bảng kết quả của phép nối SP và P

S*(SP * P) S# P# KL PTen Mau TK STen DC


S1 P1 3 A Đ 12 Hùng HN
S2 P1 3 A Đ 12 Lan HT

Bảng 17: Bảng kết quả của phép nối S và (SP và


P)
S * (SP * P) = S * (P * SP) ≠ (S * P) * SP vì giữa S và P không có thuộc tính kết
nối
3. 3. Dãy các phép chọn
Quy tắc: σF1(σF2...(σFn(R)))= σF1^ F2... ^ Fn(R)
Ví dụ: Tìm thông tin về mặt hàng có TK là 17 và có màu X
σMau='X'(σTK=17(P)) = σTK=17(σMau='X'(P)) = σMau='X' ^ TK=17(P)
Xét σMau='X'(σTK=17(P))
Q=σTK=17(P) P# PTen Mau TK
P2 B X 17
P3 C V 17

Bảng 18: Bảng Q- kết quả của phép chọn TK=17của


P
σMau='X'(Q) P# PTen Mau TK
P2 B X 17

Bảng 19: Bảng kết quả của phép chọn màu X trong
Xét σTK=17(σMau='X'(P))
Q
Q=σMau='X'(P) P# PTen Mau TK
P2 B X 17

Bảng 20: Bảng kết quả Q - phép chọn màu X của P

σTK=17(Q) P# PTen Mau TK


P2 B X 17

Bảng 21: Bảng kết quả của phép chọn TK=17trong Q

Xét σMau='X' ^ TK=17(P)


σMau='X' ^ TK=17(P) P# PTen Mau TK
P2 B X 17

Bảng 22: Bảng kết quả của phép chọn TK=17 và màu=’X ’trong
P
Nhận xét σMau='X' ^ TK=17(P) có số lần truy nhập bảng ít hơn cả.
3. 4. Dãy các phép chiếu
Quy tắc: ΠX(ΠY(R)) =ΠX(R) với X  Y
Ví dụ : ΠS#(ΠS#,STen(S)) =ΠS#(S)
ΠS#,STen S# STen ΠS#(ΠS#,STen(S)) = S#
(S) ΠS#(S))
S1 Hùng S1
S2 Lan S2

ΠS#(ΠSTen,DC(S)) ≠ ΠS#(S)
ΠSTen,DC(S) STen DC ΠS#(ΠSTen,DC(S)) S#
Hùng HN
Lan HT

Hình 9: Thực hiện dãy các phép chiếu là sai


3. 5. Giao hoán phép chọn và phép chiếu
Quy tắc: σF(Y)(ΠX(R)) = ΠX(σF(Y)(R)) với Y X
Ví dụ:
Tìm tên và tồn kho của các mặt hàng có khối lượng tồn kho >15
σTK<15(ΠPTen,TK(P)) = Π PTen,TK (σTK<15(P))
Xét σTK<15(ΠPTen,TK(P))
ΠPTen,Mau,T PTen TK σTK<15(ΠPTen,T PTen TK
K(P) K(P))
A 12 A 12
B 17
C 17

Hình 10: Thực hiện phép chiếu trước, chọn


Xét Π PTen,TK (σTK<15(P))
sau
σTK<15(P) P# PTen Mau TK
P1 A Đ 12
Π PTen,TK (σTK>15(P)) PTen TK
A 12

Hình 11: Thực hiện phép chọn trước, chiếu


Tìm tên, màu của các mặt hàng có khối lượng tồn kho >15
sau
σTK<15(ΠPTen,Mau(P)) ≠ Π PTen,Mau (σTK<15(P)). Ta có:
Q=ΠPTen,Mau(P) PTen Mau S=σTK<15(Q) PTen Mau
A Đ
B X
C V

Hình 12: Thực hiện phép chiếu trước, chọn


sau
Π PTen,Mau (σTK<15(P)) PTen Mau
A Đ

Hình 13: Thực hiện phép chọn trước, chiếu


sau
3. 6. Giao hoán phép chọn và phép kết nối
Quy tắc
σF(R1(X) * R2(Y)) =
σF(R1) * R2 với F = F(X) (F là diều kiện chọn trên tập X)
σF1(R1) * σF2(R2) với F = F1(X) ^ F2(Y)
σF2(σF1(R1)) * R2) với F = F1(X) ^ F2 (XY)
Ta có tính chất tương tự với phép tích đề các và phép kết nối thường.
Ví dụ :
σSTen='Lan'(S * SP) = σSTen='Lan'(S) * SP
Xét σSTen='Lan'(S * SP)
Q = S*SP S# STen DC P# KL
S1 Hùng HN P1 3
S2 Lan HT P1 3

σSTen='Lan'(Q) S# STen DC P# KL
S2 Lan HT P1 3

Hình 14: Thực hiện phép kết nối trước, chọn


sau
Xét σSTen='Lan'(S) * SP
Q=σSTen='Lan'(S) S# STen DC
S2 Lan HT

Q*SP S# STen DC P# KL
S2 Lan HT P1 3

Hình 15: Thực hiện phép chọn trước, kết nối


sau
σTK=17 ^ S#='S3'(P * SP) = σTK=17(P) * σS#='S3'(SP)
Xét σTK=17 ^ S#='S3'(P * SP)
P*SP P# PTen Mau TK S# KL
P1 A Đ 12 S1 3
P1 A Đ 12 S2 3
P2 B X 17 S3 2

σTK=17 ^ S#='S3'(P * SP) P# PTen Mau TK S# KL


P2 B X 17 S3 2

Hình 16: Thực hiện phép kết nối trước, chọn


sau
Xét σTK=17(P) * σS#='S3'(SP)
σTK=17(P) P# PTen Mau TK
P2 B X 17
P3 C V 17

σS#='S2'(SP) S# P# KL
S3 P2 2

σTK=17(P) * σS#='S3'(SP) P# PTen Mau TK S# KL


P2 B X 17 S3 2

Hình 17: Thực hiện phép chọn trước,nối sau


σ Mau='X'( σTK=17(P)*SP) = (σ Mau='X' ^ TK=17 (P))*SP
Xét σ Mau='X'( σTK=17(P)*SP) với Q=σTK=17(P)
Q P# PTen Mau TK
P2 B X 17
P3 C V 17

Q*SP P# PTen Mau TK S# KL


P2 B X 17 S3 2

σ Mau='X'( Q*SP) P# PTen Mau TK S# KL


P2 B X 17 S3 2
Hình 3.18: Thực hiện phép chọn trư ớ c , r ồ i n ố i v à c h ọ n c u ố i c ù n g

Xét (σ Mau='X' ^ TK=17 (P))*SP


Q=σ Mau='X' ^ TK=17 (P) P# PTen Mau TK
P2 B X 17
Q*SP P# PTen Mau TK S# KL
P2 B X 17 S3 2

Hình 19: Thực hiện phép chọn 2 điều kiện kết hợp, rồi nối sau
3. 7. Giao hoán phép chiếu và phép kết nối.

Quy tắc: Nếu (X)


Z (
X 
Y thì
)

ΠX(R1(Z) * R2(Y)) =ΠXZ(R1) * ΠX Y(R2)


Chú ý: Phép chiếu thường được sử dụng trước phép kết nối để giảm kích thước
bảng quan hệ nhưng khi chiếu nên lưu ý đến các thuộc tính kết nối.
Ví dụ:
Đưa ra mã nhà cung cấp, tên nhà cung cấp và mã các mặt hàng mà nhà cung cấp
đó đã cung ứng: ΠS#,STen,P#(S * SP) = ΠS#,STen(S)*ΠS#,P#(SP)
Xét ΠS#,STen,P#(S * SP)
S*SP=Q S# STen DC P# KL ΠS#,STen,P#( S# STen P#
Q)
S1 Hùn HN P1 3 S1 Hùng P1
g
S2 Lan HT P1 3 S2 Lan P1

Hình 20: Thực hiện phép nối trước rồi chiếu sau

Xét ΠS#,STen(S)*ΠS#,P#(SP)
Q = ΠS#, STen(S) S# STen S = ΠS#,P#(SP) S# P#
S1 Hùng S1 P1
S2 Lan S2 P1

Q*S S# STen P#
S1 Hùng P1
S2 Lan P1

Hình 21: Thực hiện phép chiếu trước rồi nối sau
Đưa ra tên nhà cung cấp và mã các mặt hàng mà nhà cung cấp đó đã cung ứng:
ΠSTen,P#(S * SP) ≠ ΠSTen(S)*ΠP#(SP)
ΠSTen,P#(S * STen P# ΠSTen STen ΠP#(S P#
SP) (S) P)
Hùng P1 Hùng P1
Lan P1 Lan P1

ΠSTen(S) * ΠP#(SP)

Hình 22: Thực hiện phépgiao hoán giữa phép chiếu và phép
nối sai
3. 8. Giao hoán phép chọn và phép hợp
Quy tắc: σF(R1  R2) = σF(R1) σF(R2)
Ví dụ: Cho hai quan hệ
R1 A C B R2 A C B
a 1 1 a 3 1
a 2 1 a 2 1
b 1 2 b 1 1
Xét σA=’a’(R1  R2) và σA=’a’(R1)  σA=’a’(R2)
*/ Xét σA=’a’(R1  R2)

Q=R1  R2 A C B σA=’a’(R1  A C B
R2)
a 1 1 a 1 1
a 2 1 a 2 1
b 1 2 a 3 1
a 3 1
b 1 1

Hình 23: Thực hiện phép hợp trước, chọn sau


*/ Xét σA=’a’(R1)  σA=’a’(R2)
σA=’a’(R1) A C B σA=’a’(R2) A C B
a 1 1 a 3 1
a 2 1 a 2 1

σA=’a’(R1)  σA=’a’(R2) A C B

a 1 1
a 2 1
a 3 1

Hình 24: Thực hiện phép chọn trước,hợp sau

3. 9. Giao hoán phép chọn và phép hiệu tập hợp


Quy tắc: σF(R1 - R2) = σF(R1) – σF(R2)
Ví dụ: Xét σB>=2(R1 - R2) và σB>=2(R1) - σB>=2(R2)
R1 - R2 A C B σB>=2(R1- A C B
R2)
a 1 1 b 1 2
b 1 2

Hình 25: Thực hiện phép trừ trước, chọn sau

Q = σB>=2(R1) A C B
b 1 2
S = σB>=2(R2) A C B

Q-S A C B
b 1 2

Hình 26: Thực hiện phép chọn trước, trừ sau

3. 10. Giao hoán phép chiếu và phép hợp


Quy tắc: ΠX (R1 R2)= ΠX(R1)  ΠX(R2)
Ví dụ: xét ΠA,C(R1  R2) và ΠA,C(R1)  ΠA,C(R2)

ΠA,C(R1 R2) A C

a 1
a 2
b 1
a 3
R1 R2 A C B

a 1 1
a 2 1
b 1 2
a 3 1
b 1 1

Hình 27: Thực hiện phép hợp trước,chiếu sau

ΠA,C(R1) A C ΠA,C(R2) A C
a 1 a 3
b 1 b 1
a 2 a 2

ΠA,C(R1)  A C
ΠA,C(R2)
a 1
a 2
b 1
Hình 28: Thực hiện phép chiếu trước,
a hợp 3sau

Ví dụ 1: Tối ưu biểu thức đại số sau: P = ΠS#(σSP.P#=P.P#(σMau='Đ'(SPxP)))


Đẩy phép chọn xuống thực hiện sớm nhất áp dụng quy tắc giao hoán giữa phép
chọn và phép tích đề các.
P=ΠS#(σSP.P#=P.P#(SP x σMau=’Đ'(P)))
Tổ hợp phép chọn và phép tích đề các thành phép kết nối ta có biểu thức
P = ΠS#(SP*σMau='Đ'(P))
Dùng phép chiếu để giảm kích thước quan hệ ta có biểu thức tối ưu
P = ΠS#(ΠS#,P#(SP)*ΠP#(σMau='Đ'(P)))
Ví dụ 2: Cho Q(ABD), R(CDF), S(FG) tối ưu biểu thức đại số sau:
P = ΠAD(σG=’g’(Q*R*S)))
Đẩy phép chọn xuống thực hiện sớm nhất sử dụng quy tắc giao hoán giữa chọn và
phép kết nối có P = ΠAD(Q*R*σG=’g’ (S))
Áp dụng quy tắc kết hợp của phép kết nối có P = ΠAD(Q*(R*σG=’g’ (S)))
Áp dụng quy tắc giao hoán giữa phép chiếu và phép kết nối ta có biểu thức
P = ΠAD(Q)*ΠD(R* σG=’g’ (S))
Dùng phép chiếu để giảm kích thước quan hệ ta có biểu thức tối ưu
P = ΠAD(Q) * ΠD(ΠD,F(R) * ΠF(σG=’g’ (S)))
Yêu cầu sinh viên chuẩn bị:

Đọc trước đề cương bài giảng chi tiết và slides bài giảng, xem video bài giảng, làm
bài trắc nghiệm bài 4. Đọc tài liệu tham khảo số [1] chương 3 và tài liệu tham khảo
số [2] chương 3
Tài liệu tham khảo:
[1] Nguyễn Thị Thanh Huyền, Giáo trình cơ sở dữ liệu, NXB Giáo Dục, 2011
[2] Phạm Thị Thanh Hồng, Cơ sở dữ liệu, NXB Lao động xã hội, 2000

You might also like