Thuật toỏn INGRES

Một phần của tài liệu tối ưu hóa truy vấn trong cơ sở dữ liệu phân tán (Trang 42 - 46)

6. Cỏc kết quả dự kiến

2.4.1. Thuật toỏn INGRES

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

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)

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.

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

Vớ dụ 2.6: Xột lược đồ quan hệ sau: KYSU(SHKS, TENKS, NGHE)

HOSODĂ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 KYSỤTENKS

FROM KYSU,HOSODA,DUAN

WHERE KYSỤSHKS = HOSODẠSHKS AND HOSODẠ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 KYSỤTENKS

FROM KYSU, HOSODA, JTG

WHERE KYSỤSHKS = HOSODẠSHKS AND HOSODẠSHDA = JTG.SHDA

q' được phõn tỏch tiếp như sau, trong đú GTG là quan hệ trung gian:

q12: SELECT HOSODẠSHKS INTO GTG;

FROM HOSODA, JTG

WHERE HOSODẠSHDA = JTG.SHDA q13: SELECT KYSỤTENKS

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

FROM KYSU,GTG

WHERE KYSỤ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 KYSỤTENKS FROM KYSU,GTG

WHERE KYSỤ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 KYSỤTENKS FROM KYSU

WHERE KYSỤSHKS = "E1" q132: SELECT KYSỤ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-tnụedụvn

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 1 to 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-QOĂ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 tối ưu hóa truy vấn trong cơ sở dữ liệu phân tán (Trang 42 - 46)

Tải bản đầy đủ (PDF)

(106 trang)