Tối ưu hóa trên cơ sở ước lượng chi phí

Một phần của tài liệu xử lý và tối ưu câu truy vấn (Trang 28 - 32)

Ý tưởng cơ bản của cách tiếp cận này được mô tả như sau:

Với mỗi câu hỏi, ta liệt kê ra tất cả các phương án thực thi có thể. Và với mỗi phương án thực thi ta ước lượng chi phí của nó. Cuối cùng chọn ra phương án thực thi với chi phí thấp nhất.

Rõ ràng là, nếu chi phí của mọi phương án thực thi đều được đánh giá chính xác thì cuối cùng sẽ tìm được phương pháp tối ưu và đó cũng chính là tính hấp dẫn của cách tiếp cận này. Tuy nhiên cách tiếp cận này cũng có hai khó khăn:

1. Có thể có quá nhiều phương án thực thi phải liệt kê ra. Nói chung số phương án thực thi có thể có là một hàm mũ của số các quan hệ được tham chiếu trong câu hỏi.

2. Ước lượng chi phí cho mỗi phương án thực thi có thể có khó khăn. Trong mục 6.4 chúng ta đã minh họa cách ước lượng chi phí CPU và chi phí I/O cho một số phép toán. Trong một phương án thực thi phức tạp hơn, kết quả của một phép toán, op1 chẳng hạn, có thể được dùng làm đầu vào của một phép toán khác, op2. Để ước lượng chi phí op2, cần ước lượng được kích thước kết quả của op1. Lấy một thí dụ: Để ước lượng chi phí của (R S) T, ta cần phải ước lượng chi phí của (RS). Giả sử kết quả của (RS) là W. Khi đó ta cần ước lượng chi phí của (WT). Chi phí tổng cộng là tổng các chi phí nói trên. Từ đó thấy được phần khó khăn nhất trong ước lượng chính xác chi phí của một phương án thực thi là việc ước lượng chính xác kích thước các kết quả trung gian.

Để khắc phục khó khăn thứ nhất, một cách tiếp cận chung là chỉ liệt kê ra một tập con của tập tất cả các phương án thực thi có thể có, chẳng hạn với việc tính kết nối của nhiều quan hệ, ta chỉ xét những phương án cây sâu trái (left deep tree plans). Thí dụ, phương án cây sâu trái để kết nối năm quan hệ R1, R2, …., R5 sẽ là ((((R1R2) R3)  R4) R5).

Vì ba phép chọn, chiếu và kết nối thường được dùng nhất trong đại số quan hệ, sau đây ta sẽ thảo luận ngắn gọn về các kĩ thuật ước lượng kích thước kết quả của ba phép toán đó.

Phép chọn σC(R).

Gọi SC(R) là hệ số chọn của điều kiện C trên quan hệ R. Khi đó số bộ trong σC(R) được ước lượng là n.SC(R) trong đó n là số bộ của R, còn kích thước của σC(R), tính theo trang, được ước lượng là N.SC(R), trong đó N là kích thước của R tính theo trang. Rõ ràng ước lượng nói trên chỉ chính xác nếu ta có được một ước lượng chính xác của hệ số chọn. Khi C là một điều kiện đơn giản dạng “A op a”, hệ số chọn phụ thuộc nhiều vào sự phân bố của các giá trị của A trong r. Thường là ta giả thiết có sự phân bố đều, và khi đó hệ số chọn được xác định dễ dàng. Nếu sự phân bố thực lệch nhiều khỏi sự phân bố đều thì việc ước lượng sẽ thiếu chính xác. Đôi khi cá hệ số chọn cũng có thể được suy từ những đặc trưng của thuộc tính A. Chẳng hạn, nếu A là khóa thì SA=a(R) có thể được ước lượng là I/n. Khi C là một hội hay một tuyển của nhiều điều kiện đơn giản, hệ số chọn cũng phụ thuộc vào những sự phụ thuộc giữa các thuộc tính liên quan. Chẳng hạn, nếu điều kiện đơn giản, hệ số chọn cũng phụ thuộc vào những sự phụ thuộc giữa các thuộc tính liên quan. Chẳng hạn, nếu điều kiện là “(A op a) ∧ (Bop b)” và các thuộc tính A và B là độc lập thì hệ số chọn có thể được ước lượng là SA op a (R). SB opb (R).

Phép chiếu ΠA1,…,At(R)

Ta xét trường hợp khi các bộ dư đã được lấy đi. Nói chung việc ước lượng kích thước kết quả của phép chiếu là rất khó. Tuy nhiên có nhiều trường hợp đặc biệt, việc ước lượng có thẻ được tiến hành tương đối chính xác.

Trường hợp 1: {A1,..At} là một siêu khóa. Trong trường hợp này không có bộ nào là

dư và do đó số bộ trong ΠA1,…,At(R) vẫn là n, còn kích thước của ΠA1,…,At(R) tính theo trang là (.Σ1i=tlength (A))/kích thước trang, trong đó length (Ai) kí hiệu số bytes để biểu diễn các giá trị của Ai.

Trường hợp 2: t = 1, có nghĩa kết quả của phép chiếu chỉ chứa một thuộc tính. Khi đó số bộ trong kết quả sẽ là số các giá trị phân biệt trong cột A của A, và kích thước kết quả tính theo trang sẽ bằng dist (A1).length(A1)/kích thước trang.

Trường hợp 3: Một trong các thuộc tính, Aj chẳng hạn, 1≤ j ≤ t, xác định hàm các thuộc tính còn lại. Khi đó, số bộ của kết quả là dist(Aj), còn kích thước của kết quả tính theo trang là:

dist(Aj).(Σ1i=tlength (A))/ kích thước trang.

Trường hợp 4: Tất cả các thuộc tính Ai đều độc lập. Khi đó số bộ của kết quả được ước lượng dễ dàng. Thí dụ với t = 2, số đó bằng:

n.(dist(A1)/n + dist(A2)/n – dist(A1)/n.dist(A2)/n) = dist(A2) – dist(A1).dist(A1).dist(A2)/n.

Sau khi đã ước lượng được số bộ, kích thước của kết quả được xác định dễ dàng vì mỗi bộ trong kết quả có độ dài bằng Σ1i=tlength (Ai)

Phép kết nối RR.AopS.BS

Để định ý ta xét trường hợp op là =. Nếu A và B là các thuộc tính bất kì của R và S thì việc ước lương số bộ trong kết quả của phép kết nối là rất khó. Rất may trong thực hành, phần lớn là kết nối giữa một khóa được tham chiếu. Trong trường hợp này, việc ước lượng có thể được tiến hành như sau. Giả sử A là khóa chính của R và B là khóa ngoài của S tham chiếu A. Khi đó số bộ trong kết quả của phép kết nối là m, là số bộ của S nếu trong cột B không chứa các giá trị null. Điều đó có được vì mỗi bộ của S sẽ được nối với đúng một bộ của R, và khi đó kích thước của kết quả tính theo trang sẽ là:

m.(length(R) + length(S))/kích thước trang.

Khi có các giá trị null xuất hiện trong cột B, những bộ trong S với giá trị null trong cột B không nối được với các bộ trong R, và số bộ trong kết quả sẽ nhỏ hơn m. Trong trường hợp này, m có thể được dùng làm xấp xỉ cho số bộ trong kết quả. Một phức tạp khác có thể có là R và S thường không phải là các quan hệ cơ sở, chẳng hạn R và S có thể là những kết quả trung gian có được từ phép chọn. Trong trường hợp này, không có gì đảm bảo rằng mỗi bộ của S với giá trị khác null trong cột B sẽ sánh hợp với một bộ nào đó của R tuy rằng vẫn còn đúng là mọi bộ của S có thể nối với nhiều nhất một bộ của R. Trong trường hợp này, số bộ trong kết quả có thể được ước lượng là m’r, với m’ là số bộ trong S sau phép chọn, còn r là tỉ số giữa số bộ trong R có sau phép chọn với số bộ trong R có trước phép chọn.

Làm thế nào để có thể ước lượng kích thước của các kết quả trung gian một cách chính xác là một vấn đề được nghiên cứu nhiều trong sách báo. Các phương pháp được đề xuất có thể chia thành ba loại:

Một là các phương pháp lấy mẫu, ước lượng các kích thước dựa vào thông tin được thu thập từ một phần nhỏ các trường hợp lấy từ quan hệ.

Hai là các phương pháp histogram, sử dụng các thông tin chi tiết được lưu trữ trước về các quan hệ để ước lượng các kích thước.

Ba là các phương pháp tham số, sử dụng các kĩ thuật giải tích và/hay thống kê cho việc ước lượng kích thước.

Các phương pháp lấy mẫu không đòi hỏi giả thiết gì về sự phân bố của dữ liệu cũng như việc lưu trữ trước những thống kê chi tiết. Lấy mẫu được tiến hành dựa vào các giá trị hiện có của dữ liệu. Các phương pháp lấy mẫu đã được chứng minh là có độ chính xác tốt trong ước lượng, tuy là chi phí cho loại phương pháp này lớn hơn đáng kể so với hai loại phương pháp kia.

Các phương pháp histogram cần lưu giữ các thống kê chi tiết về dữ liệu trong CSDL. Tuy là việc lưu giữ những thống kê đó dẫn đến những tốn kém thêm về không gian nhớ và tính toán, điều đó về phương diện thực hành vẫn có thể quản lí được. Các phương pháp này được sử dung rộng rãi trong các hệ CSDL thương mại.

Các phương pháp tham số thường đặt những giả thiết về sự phân bố của các giá trị dữ liệu (chẳng hạn phân bố đều) hoặc về tương quan giữa các giá trị của những thuộc tính khác nhau (chẳng hạn tính độc lập). Những giả thiết đó có thể không chính xác, ảnh hưởng tới tính hiệu quả của loại phương pháp này. Tuy nhiên các phương pháp tham số cũng được sử dụng rộng rãi trong các hệ CSDL thương mại.

Bài tập

0 1. Giả sử các quan hệ R1(A,B,C), R2(C,D,E) và R3 (E,F), và R1 có 1000 bộ, R2 có 1500 bộ và R3 có 750 bộ. Đánh giá kích cỡ của tích Đề các của R1, R2 và R3. Hãy đề xuất một chiến lược hiệu quả để tính toán phép kết nối.

1 2. Giả sử các quan hệ R1 (A,B,C), R2(A, D, F) và R3 (B, E, T, Z) và R1 có 3500 bộ, R2 có 500 bộ và R3 có 700 . Hãy tính chi phí cho các thao tác sau:

2 - Thêm 100 bộ vào R1 . 3 - Thêm 20 bộ vào R2. 2 - Thêm 20 bộ vào R3 .

+ Biết chi phí của R 1 x R 2hãy tính chi phí R1 x R 2x R 3 + Vẽ đồ thị các câu hỏi trên. Vẽ cây đại số quan hệ để tối ưu.

0 3. Hãy cho ý kiến của mình về nhận xét sau: Thực hiện phép kết nối hẹp nhất trong dãy các phép kết nối” nhưng làm thế nào để biết đâu là phép kết nối hẹp nhất.

Một phần của tài liệu xử lý và tối ưu câu truy vấn (Trang 28 - 32)

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

(32 trang)
w