Thuật toán System

Một phần của tài liệu Tiền tối ưu các các SQL chương trình nguồn (Trang 29 - 34)

System R thực hiện tối ƣu hoá tĩnh bằng cách tìm kiếm vét cạn không gian lời giải. Đầu vào cho thể tối ƣu hoá của System R là cây toán tử do phân rã câu truy vấn SQL. Đầu ra của nó là một hoạch định thực thi để cài đặt các toán tử “tối ƣu”.

Thay vì thực hiện một cách có hệ thống các phép toán chọn trƣớc các phép nối nhƣ trong INGRES, System R chỉ thực hiện nếu điều đó dẫn đến một chiến lƣợc tốt hơn. Thể tối ƣu sẽ gán một chi phí (theo thời gian) cho mỗi cây dự tuyển và giữ lại cây có chi phí thấp nhất. Những cây dự tuyển có đƣợc bằng cách hoán vị các thứ tự nối của n quan hệ của câu truy vấn dựa vào các qui tắc kết hợp và hoán vị. Để hạn chế chi phí dành cho việc tối ƣu hoá, số lƣợng các cây đƣợc giảm bớt bằng kỹ thuật qui hoạch động. Tập hợp các chiến lƣợc khác nhau đƣợc xây dựng động để khi hai nối tƣơng đƣơng nhau nhờ hoán vị, chỉ có nối có chi phí thấp nhất mới đƣợc giữ lại. Ngoài ra các chiến lƣợc phải lấy tích Descartes đều bị loại bỏ ngay khi có thể.

Chi phí của một chiến lƣợc dự tuyển là tổ hợp các chi phí xuất nhập và chi phí CPU. Ƣớc lƣợng các chi phí này (vào lúc biên dịch) dựa trên mô hình chi phí có đƣa ra các công thức tính chi phí cho mỗi thao tác ở mức thấp (thí dụ thao tác chọn bằng chỉ mục B-cây). Đối với phần lớn các phép toán (ngoại trừ phép chọn với đối sánh chính xác), công thức tính chi phí đều dựa vào lực lƣợng của các toán hạng. Thông tin về các lực lƣợng của các quan hệ trong CSDL đƣợc tìm thấy trong các thống kê của CSDL, đƣợc hệ thống System R tự động quản lý. Lực lƣợng của các kết quả trung gian đƣợc ƣớc lƣợng dựa vào các hệ số chọn của mỗi phép toán.

Thuật toán tối ƣu hoá bao gồm hai bƣớc chính. Trƣớc tiên là dự đoán phƣơng pháp tốt nhất để truy xuất đến mỗi quan hệ dựa trên một vị từ chọn lựa (là phƣơng pháp có chi phí thấp nhất). Thứ hai đối với mỗi quan hệ R, thứ

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/ tự nối tốt nhất sẽ đƣợc ƣớc lƣợng, trong đó trƣớc tiên R sẽ đƣợc truy xuất bằng cách sử dụng phƣơng pháp truy xuất đơn quan hệ tốt nhất.

Khi xét các nối, chúng ta có hai thuật toán, và một trong hai đã tối ƣu trong ngữ cảnh đã cho. Đối với nối của hai quan hệ, quan hệ đƣợc đọc trƣớc gọi là quan hệ ngoại cảnh (external relation), còn quan hệ kia, là quan hệ có các bộ đƣợc tìm dựa theo các giá trị có đƣợc từ quan hệ ngoại cảnh sẽ đƣợc gọi là quan hệ nội sự (internal relation). Chọn phƣơng pháp nối ở đây là xác định đƣờng truy xuất có chi phí thấp nhất đến nội sự.

Phƣơng pháp thứ nhất đƣợc việc thiết kế cấu trúc database gọi là lặp lồng (nested loop) tạo ra tích của hai quan hệ. Đối với mỗi bộ của ngoại cảnh, từng bộ của nội sự thoả vị từ nối sẽ đƣợc truy xuất lần lƣợt để tạo ra quan hệ kết quả. Một chỉ mục trên một thuộc tính nối là một đƣờng truy xuất rất hiệu quả đối với nội sự. Khi không có chỉ mục với các quan hệ tƣơng ứng có n1 và n2 trang, chi phí thuật toán tỷ lệ với n1* n2, quá cao khi n1 và n2 lớn.

Phƣơng pháp thứ hai đƣợc gọi là nối trộn (merge join) gồm có trộn hai quan hệ đã sắp theo thuộc tính nối. Chỉ mục trên thuộc tính nối có thể đƣợc sử dụng làm đƣờng truy xuất. Nếu điều kiện nối là đẳng thức, chi phí nối hai quan hệ n1 và n2 trang tỷ lệ với n1+ n2. Vì thế phƣơng pháp luôn luôn đƣợc chọn cho nối bằng và khi các quan hệ đã đƣợc xếp thứ tự trƣớc đó. Nếu một hoặc cả hai quan hệ đều chƣa đƣợc sắp, chi phí của thuật toán nối lặp lồng sẽ rất đáng kể so với chi phí của phép nối sắp trộn. Chi phí sắp n trang tỉ lệ nlogn. Nói chung thuật toán nối trộn sẽ hữu ích khi cần nối các quan hệ lớn.

Phiên bản đơn giản của thuật toán tối ƣu hoá của System R cho câu truy vấn chọn- chiếu- nối đƣợc trình bày trong thuật toán dƣới đây có hai vòng. Vòng đầu tiên chọn ra đƣờng truy xuất một quan hệ tốt nhất đến mỗi đến mỗi quan hệ trong câu vấn tin, còn vòng thứ hai kiểm tra tất cả các hoán vị khả hữu của các thứ tự nối (có n! hoán vị cho n quan hệ) và chọn ra chiến lƣợc truy

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/ xuất tốt nhất cho câu vấn tin. Các hoán vị đƣợc tạo ra bằng cách xây dựng động một cây các chiến lƣợt khác nhau, sau đó là các nối của ba quan hệ. Điều này cứ tiếp tục cho đến khi các nối của n quan hệ đều đƣợc tối ƣu. Với hai Heuristic này, số lƣợng các chiến lƣợc cần kiểm tra có cận trên là 2n chứ không phải là n!.

Thuật toán R-QOA

Input: QT: cây truy vấn có n quan hệ

Output: Câu truy vấn tối ƣu

Begin

For mỗi quan hệ Ri QT do

begin

For mỗi đƣờng truy xuất APij đến Ri do

Xác định cost(APij)

End-for

Best_APi APij có chi phí nhỏ nhất

End-for

For mỗi thứ tự (Ri1, Ri2, . . ., Rin) với i = 1, . . . , n! do

begin

Xây dựng strategy (. . .((best_ APi1 Ri2) Ri3) … Rin)

Tính chi phí của strategy

End-for

Output strategy có chi phí nhỏ nhất

End. {R- QOA}

Ví dụ minh họa:

Chúng ta hãy minh hoạ thuật toán này với câu truy vấn q1 trên CSDL mẫu đã nêu trên.

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/ q1: SELECT FROM NHANVIEN.HO_TEN NHANVIEN, PHANNHIEM.MANV WHERE NHANVIEN.MANV=PHANNHIEM.MANV AND PHANNHIEM.MADA=DUAN.MADA AND TENDA= “CSDL” Để dễ trình bày chúng ta ký hiệu:

E=NHANVIEN, G= PHANNHIEM và J=DUAN

Đồ thị nối của q1 đƣợc trình bày trong hình dƣới đây. Để cho đơn giản, nhãn MANV trên cạnh E----G thay cho vị từ E.MANV =G.MANV và nhãn trên cạnh G---J biểu thị cho vị từ G.MADA=J.MADA. chúng ta giả sử có các chỉ mục sau:

E chỉ mục trên MANV G chỉ mục trên MADA

J chỉ mục trên MADA và một chỉ mục khác trên TENDA

Chúng ta giả sử rằng vòng lặp đầu tiên của thuật toán chọn ra các đƣờng truy xuất một quan hệ nhƣ sau (xem Hình 1.1):

E: Quét tuần tự (bởi vì không có phép chọn nàotrên E) G: Quét tuần tự (bởi vì không có phép chọn nào trên G)

J: Chỉ mục trên TENDA (do có một phép chọn trên J theo TENDA)

Hình 1.1. Đồ thị kết nối của câu truy vấn

Cấu trúc động của cây các chiến lƣợc lựa chọn nhƣ hình 1.2. Các phép toán có đánh dấu "loại bỏ" (pruned) sẽ đƣợc loại bỏ tự động. Mức một của cây chỉ ra phƣơng pháp truy cập tốt nhất. Các chiến lƣợc (E J) và (J E) bị

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/ loại bỏ. Giả sử (E G) và (G J) có chi phí cao hơn (G E) và (J G) tƣơng ứng. Nhƣ vậy chúng có thể bị loại bỏ, vì bằng cách hoán vị chúng ta có các thứ tự kết nối tuơng đƣơng tốt hơn. Mức ba đƣa ra hai khả năng còn lại, thứ tự kết nối tốt nhất là chi phí ít nhất của ((G E) J) và ((J G) E). Cuối cùng dựa vào chỉ mục trên thuộc tính chọn và truy nhập rực tiếp đến các bộ kết nối của G và E, vì vậy phƣơng pháp truy nhập sau đƣợc chọn:

Hình 1.2 Các thứ tự kết nối lựa chọn

SQL là một ngôn ngữ hỗ trợ đắc lực trong việc tìm kiếm thông tin. Tuy nhiên, nó là một trong những yếu tố chính ảnh hƣởng trực tiếp đến hiệu suất làm việc của ứng dụng, đóng vai trò quan trọng tƣơng tự nhƣ việc thiết kế cấu trúc database. Tùy vào cách diễn đạt của một câu lệnh SQL, tốc độ xử lý của hệ thống sẽ khác nhau, các truy vấn phức tạp sẽ cản trở rất nhiều đến khả năng truy xuất dữ liệu của ứng dụng. Bằng cách kiểm tra và tối ƣu các câu truy vấn SQL, chúng ta có thể tối ƣu hóa và cải thiện hiệu suất làm việc của hệ thống.

(G E) J (J G) E

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/

Một phần của tài liệu Tiền tối ưu các các SQL chương trình nguồn (Trang 29 - 34)

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

(66 trang)