Thuật toán INGRES

Một phần của tài liệu luận văn thạc sĩ tối ưu hóa truy vấn trong cơ sở dữ liệu phân tán (1) (Trang 32 - 35)

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 <Avalue> 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 q11q12q13. 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), t1iR1} 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

outputrun(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}

outputoutput output' {hợp tất cả các kết quả} endfor

VCHOOSE-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.

Một phần của tài liệu luận văn thạc sĩ tối ưu hóa truy vấn trong cơ sở dữ liệu phân tán (1) (Trang 32 - 35)