5. Các kết quả dự kiến đạt đƣợc
2.4.1 Thuật toán INGRES
INGRES sử dụng thuật toán tối ưu hoá câu truy vấn động, chia một truy vấn phép tính quan hệ thành các truy vấn nhỏ hơn. Một truy vấn đa biến đầu tiên được phân tích thành một dãy các truy vấn con có một biến duy nhất chung, mỗi truy vấn con được dựa vào kết quả của truy vấn con trước đó. Sau đó, mỗi truy vấn con được xử lý bởi "bộ xử lý truy vấn một biến" (OVQP: one-variable query processor). OVQP tối ưu truy nhập tới một quan hệ đơn, bằng cách lựa chọn phương pháp truy nhập tốt nhất (chỉ số, quét tuần tự). Ví dụ: với tân từ dạng <A = value> thì nên dùng một chỉ số trên A; với tân từ dạng <Avalue> thì nên dùng quét tuần tự.
Câu truy vấn q được phân tích thành hai câu truy vấn con qi-1 và qi, ký hiệu qi- 1 qi, nghĩa là qi-1 được thực hiện trước và kết quả của nó được sử dụng bởi qi. Bộxử lý câu truy vấn INGRES phân tích q thành n câu truy vấn q1 q2 q3...
qn. Sự phân tích này sử dụng hai kỹ thuật cơ bản phân tách và thay thế. Nếu q biểu diễn dạng:
SELECT V2.A2, V3.A3,...., Vn.An
FROM R1 V1, R2 V2,..., Rn Vn
WHERE P1(V1.A1')
AND P2(V1.A1, V2.A2,...., Vn.An)
Trong đó: Câu lệnh from xác định các biến bộ (ví dụ V1) trên các quan hệ (ví dụ R1); Ai, Ai' là danh sách các thuộc tính của quan hệ Ri; P1 là tân từ một đối liên quan đến các thuộc tính của R1; P2 là tân từ nhiều đối liên quan đến các thuộc tính của R1, ...,Rn. Một truy vấn như vậy có thể phân tách thành hai truy vấn con q' q'' bằng cách phân tích các biến chung V1:
q': SELECT V1.A1 INTO R1' FROM R1 V1 WHERE P1(V1.A1') q": SELECT V2.A2, V3.A3,... ., Vn.An FROM R1' V1, R2 V2,..., Rn Vn WHERE P2(V1.A1, V2.A2,... ., Vn.An)
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Trong đó:R‟1 là quan hệ tạm thời bao hàm các thông tin cần thiết cho tiếp tục truy vấn.
Ví dụ 2.6: Xét lược đồ quan hệ sau: KYSU(SHKS, TENKS, NGHE)
HOSODA(SHKS, SHDA, TRNH,THOIGIAN) DUAN(SHDA, TENDA, NGANSACH)
Trong đó:
SHKS: Số hiệu kỹ sư TENKS: Tên kỹ sư NGHE: Nghề nghiệp SHDA: Số hiệu dự án
TRNH: Trách nhiệm với dự án
THOIGIAN: Thời gian được giao theo tháng
Câu truy vấn: "Tìm tên kỹ sư làm việc cho dự án CAD/CAM" q1: SELECT KYSU.TENKS
FROM KYSU,HOSODA,DUAN
WHERE KYSU.SHKS = HOSODA.SHKS AND HOSODA.SHDA = DUAN.SHDA AND TENDA = "CAD/CAM"
q1được thay bởi q11 q', trong đó JTG là quan hệ trung gian q11: SELECT DUAN.SHDA INTO JTG
FROM DUAN
WHERE TENDA = "CAD/CAM" q': SELECT KYSU.TENKS
FROM KYSU, HOSODA, JTG
WHERE KYSU.SHKS = HOSODA.SHKS AND HOSODA.SHDA = JTG.SHDA
q' được phân tách tiếp như sau, trong đó GTG là quan hệ trung gian: q12: SELECT HOSODA.SHKS INTO GTG;
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
WHERE HOSODA.SHDA = JTG.SHDA q13: SELECT KYSU.TENKS
FROM KYSU,GTG
WHERE KYSU.SHKS = GTG.SHKS
Như vậy, q1 có thể biến đổi thành q11q12q13. Câu truy vấn q11 là đơn biến và có thể thực hiện bởi OVQP, q12 và q13 không là đơn biến và không thể rút gọn bởi phân tách.
Một truy vấn con đa biến, không thể tiếp tục phân tách (ví dụ q12, q13), được biến đổi thành tập các truy vấn con có ít nhất một biến bởi sự thay thế bộ. Cho một câu truy vấn q n – biến, các bộ của một biến được thay thế bởi các giá trị của chúng, do đó đưa ra một bộ của các truy vấn (n -1) – biến. Sự thay thế bộ tiến hành như sau:
- Một biến trong q được chọn để thay thế bộ, ví dụ V1
- Với mỗi bộ t1i trong R1, các thuộc tính thuộc V1 trong q được thay thế bởi các giá trị thực của chúng trong t1i, do đó sinh ra truy vấn q' với n -1 biến. Như vậy, tổng số các truy vấn q' được đưa ra bởi thay thế bộ là card(R1). Sự thay thế bộ có thể tóm tắt như sau:
q(V1, V2, V3, ....,Vn) được thay thế bởi { q'(t1i, V2, V3, ....,Vn), t1iR1} Ví dụ 2.7: Xét truy vấn q13
q13: SELECT KYSU.TENKS FROM KYSU,GTG
WHERE KYSU.SHKS = GTG.SHKS
Quan hệ được xác định bởi biến GTG trên một thuộc tính đơn (SHKS). Giả sử nó chỉ chứa hai bộ <E1> và <E2>. Sự thay thế của GTG sinh ra hai câu truy vấn con một biến:
q131: SELECT KYSU.TENKS FROM KYSU
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
q132: SELECT KYSU.TENKS FROM KYSU
WHERE KYSU.SHKS = "E2" Truy vấn có thể xử lý bởi VOQP
Sau đây là thuật toán tối ưu hóa câu truy vấn của INGRES, gọi là INGRES- QOA[7].
Thuật toán: INGRES-QOA
Input: MVQ: Truy vấn đa biến với n biến Output: output: Kết quả thực hiện
Begin
output
if n=1 then
outputrun(MVQ) {Thực hiện truy vấn một biến}
else begin {tách MVQ thành m truy vấn một biến và một truy vấn nhiều
biến}
OVQ1,...,OVQm, MVQ' MVQ for i 1to m do
begin
output' run(OVQi) {Thực thi OVQi}
outputoutput output' {hợp tất cả các kết quả} endfor
VCHOOSE-VARIABLE(MVQ') {V được chọn cho phép thế bộ} formỗi bộ t V do
begin
MVQ"thay thế các giá trị cho t trong MVQ' output
INGRES-QOA(MVQ") {gọi đệ quy} output
output output {hợp tất cả các kết quả} end
Endif
End.