Các phương pháp tìm kiếm cho lựa chọn phức tạp: Nếu điều kiện của phép SELECT là một điều kiện liên kết, tức là điều kiện đó được tạo thành từ nhiều điều kiện đơn, kết nối với nhau bằng
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Đào Thị Thu Vân
XỬ LÝ TRUY VẤN VÀ QUẢN LÝ GIAO TÁC
LUẬN VĂN THẠC SĨ
Hà Nội - 2005
Trang 2MỤC LỤC
MỞ ĐẦU 3
CHƯƠNG 1 XỬ LÝ VÀ TỐI ƯU TRUY VẤN 4
1.1 Chuyển các truy vấn SQL thành đại số quan hệ 5
1.2 Các thuật toán cơ bản thực hiện phép toán truy vấn 8
1.2.1 Sắp xếp ngoài 8
1.2.2 Thực thi phép chọn (SELECT) 11
1.2.3 Thực thi phép nối (JOIN) 15
1.2.4 Thực thi phép chiếu và các phép toán tập hợp 21
1.2.5 Thực thi các phép toán kết hợp 23
1.2.6 Thực thi phép nối ngoài - Outer Join 24
1.2.7 Các phép toán kết hợp sử dụng đường ống 25
1.3 Sử dụng các luật dự đoán trong tối ưu truy vấn 26
1.3.1 Các ký hiệu với cây truy vấn và đồ thị truy vấn 26
1.3.2 Tối ưu kinh nghiệm của các cây truy vấn 30
1.3.3 Chuyển cây truy vấn thành phương án thực thi truy vấn 37
1.4 Sử dụng ước lượng chọn lọc và ước lượng chi phí trong tối ưu truy vấn 38
1.4.1 Các thành phần chi phí cho việc thực thi truy vấn 39
1.4.2 Thông tin danh mục sử dụng trong các hàm giá 40
1.4.3 Ví dụ của các hàm giá đối với phép SELECT 41
1.4.4 Ví dụ của các hàm giá đối với phép JOIN 43
1.4.5 Các truy vấn có quan hệ và thứ tự nối phức tạp 46
1.4.6 Ví dụ minh hoạ cho việc tối ưu truy vấn dựa trên giá 48
1.5 Tối ưu truy vấn ngữ nghĩa 51
1.6 Tổng kết 51
Trang 3CHƯƠNG 2 XỬ LÝ GIAO TÁC 53
2.1 Giới thiệu về xử lý giao tác 53
2.1.1 Hệ thống đơn người dùng - hệ thống đa người dùng 53
2.1.2 Các giao tác, thao tác đọc - ghi và các vùng đệm DBMS 54
2.1.3 Tại sao điều khiển đồng thời là cần thiết 56
2.1.4 Tại sao khôi phục là cần thiết 59
2.2 Các khái niệm hệ thống và giao tác 61
2.2.1 Các trạng thái giao tác và các phép toán bổ xung 61
2.2.2 File log hệ thống 62
2.2.3 Điểm xác nhận của một giao tác 63
2.3 Các đặc tính mong muốn của giao tác 64
2.4 Lịch biểu và sự khôi phục 64
2.4.1 Lịch biểu của các giao tác 65
2.4.2 Miêu tả đặc tính các lịch biểu dựa trên việc khôi phục 66
2.5 Xếp thứ tự của lịch biểu 68
2.5.1 Các lịch biểu theo thứ tự, không theo thứ tự và lịch biểu có thứ tự xung đột 68
2.5.2 Kiểm tra thứ tự xung đột của một lịch biểu 72
2.5.3 Sử dụng tính thứ tự 77
2.5.4 Tương đương khung nhìn và trật tự khung nhìn 78
2.5.5 Các kiểu tương đương khác của các lịch biểu 79
2.6 Tổng kết 79
KẾT LUẬN 81
TÀI LIỆU THAM KHẢO 82
Trang 4MỞ ĐẦU
Khi dữ liệu được lưu trữ trên máy tính thì việc sử dụng nó như thế nào
để có hiệu quả là một thách thức đối với người sử dụng Để khai thác một cơ
sở dữ liệu tốt cần phải có một hệ quản trị cơ sở dữ liệu tốt Việc xử lý các truy vấn, quản lý giao tác là hai chức năng quan trọng của một hệ quản trị cơ sở dữ liệu Tìm hiểu về lý thuyết và thực tiễn của hai chức năng này có ý nghĩa trong việc xây dựng các hệ quản trị cơ sở dữ liệu. Thông qua việc nghiên cứu một số tài liệu khoa học có liên quan, trong luận văn này chúng tôi đã đi sâu
tìm hiểu các vấn đề với đề tài “xử lý truy vấn và quản lý các giao tác”
Luận văn bao gồm hai chương:
Chương 1: Xử lý và tối ưu truy vấn
Một truy vấn trên cơ sở dữ liệu là một biểu thức đại số quan hệ, thực hiện một loạt các thao tác trên cơ sở dữ liệu quan hệ để lấy ra các thông tin cần thiết cho việc quản lý Nghiên cứu về xử lý và tối ưu truy vấn là nghiên cứu các thuật toán thực hiện các phép toán đại số quan hệ cũng như tìm cách thực hiện biểu thức đại số quan hệ theo một trật tự nào đó để có câu trả lời nhanh nhất
Chương 2: Quản lý giao tác
Quản lý giao tác là rất cần thiết, đặc biệt khi các giao tác xẩy ra đồng thời và có cạnh tranh nhau một số khoản mục dữ liệu trong cơ sở dữ liệu, tính nhất quán có thể không còn được bảo toàn nữa Do vậy hệ thống cần điều khiển sự tương tác giữa các giao tác đồng thời
Do kinh nghiệm làm việc với cơ sở dữ liệu còn ít, chắc chắn trong luận văn còn nhiều thiếu sót Chúng tôi chân thành mong được các thầy, các cô, và bạn bè đóng góp ý kiến
Trang 5CHƯƠNG 1 XỬ LÝ VÀ TỐI ƯU TRUY VẤN
Trong chương này trình bầy các kỹ thuật mà hệ quản trị cơ sở dữ liệu (DBMS) sử dụng để xử lý, tối ưu hoá và thực thi các truy vấn bậc cao Một truy vấn được trình bầy trong một ngôn ngữ bậc cao, như SQL, đầu tiên phải được kiểm tra, phân tích và xác nhận tính hợp lệ Bộ quét sẽ xác định các dấu hiệu ngôn ngữ, như các từ khóa SQL, tên các thuộc tính và tên các quan hệ trong nội dung câu truy vấn, trong khi đó bộ phân tích sẽ kiểm tra cú pháp của truy vấn để xác định xem nó có được trình bầy phù hợp với các luật cú pháp của ngôn ngữ truy vấn hay không Một truy vấn cũng phải được xác nhận tính hợp lệ bằng cách kiểm tra tất cả các tên quan hệ và thuộc tính là hợp lệ, và các tên có ý nghĩa trong lưu đồ cơ sở dữ liệu cụ thể được truy vấn Sau đó một biểu diễn bên trong của truy vấn được tạo ra, thường là như một cấu trúc dữ liệu cây gọi là một cây truy vấn Cũng có thể biểu diễn truy vấn bằng cách sử dụng một cấu trúc dữ liệu đồ thị gọi là đồ thị truy vấn Sau đó DBMS sẽ phải đưa ra một chiến lược thực hiện để lấy ra kết quả của truy vấn từ các file cơ
sở dữ liệu Một truy vấn thường có nhiều chiến lược thực hiện, và quá trình chọn một chiến lược phù hợp để xử lý một truy vấn gọi là tối ưu truy vấn [1,
Thuật ngữ tối ưu được sử dụng ở đây là không chính xác vì trong một vài trường hợp, phương án thực hiện được lựa chọn không phải là chiến lược tốt nhất, nó chỉ là một chiến lược hiệu quả và hợp lý cho việc thực hiện truy vấn Việc tìm ra một chiến lược tốt nhất thường phải mất nhiều thời gian, ngoại trừ những truy vấn đơn giản, và có thể yêu cầu thông tin về việc các file
Trang 6được cài đặt như thế nào và ngay cả nội dung của các file, những thông tin đó
có thể không có trong từ điển hệ quản trị cơ sở dữ liệu Vì vậy, lập kế hoạch của một chiến lược thực hiện là chính xác hơn tối ưu truy vấn
1.1 Chuyển các truy vấn SQL thành đại số quan hệ
Một truy vấn SQL đầu tiên chuyển đổi thành một biểu thức đại số quan
hệ mở rộng tương đương, được biểu diễn như là cấu trúc dữ liệu cây truy vấn,
và sau đó được tối ưu Thông thường các truy vấn SQL được phân tích thành các khối truy vấn, tạo nên các đơn vị cơ sở mà có thể chuyển đổi thành những
Truy vấn viết trong ngôn ngữ bậc cao
Dạng biểu diễn bên trong
Scanning, parsing, validating
Query Optimiser
Runtime Database Processor
Query Code Generator Phương án thực hiện
Chương trình thực hiện truy vấn
Kết quả của truy vấn
Hình 1.1 Các bước điển hình khi xử lý một truy vấn bậc cao
Trang 7phép toán đại số và được tối ưu Một khối truy vấn chứa một biểu thức SELECT – FROM – WHERE đơn và có thể có các mệnh đề Group by và Having nếu chúng là một phần của biểu thức Vì vậy các truy vấn được lồng bên trong một truy vấn được xác định như các khối truy vấn riêng rẽ [6]
Xét các quan hệ sau: EMPLOYEE, DEPARTMENT, WORKS-ON và PROJECT
EMPLOYEE FNAME LNAME SSN
Quan hệ EMPLOYEE chứa thuộc tính của các nhân viên:
FNAME: tên của các nhân viên LNAME: họ và tên đệm của nhân viên SSN: mã nhân viên
BDATE: ngày sinh của mỗi nhân viên ADDESS: địa chỉ của nhân viên
SEX: giới tính của nhân viên SALARY: mức lương của từng nhân viên
Trang 8DNO: mã số phòng ban mà nhân viên đó làm việc
Quan hệ DEPARTMENT chứa thông tin về các phòng ban:
DNAME: tên của mỗi phòng ban
DNUMBER: mã số của mỗi phòng ban MGRSSN: mã số của người quản lý từng phòng MGRSTARTDATE: ngày bắt đầu làm quản lý của người quản lý phòng ban
Quan hệ PROJECT chứa thông tin về các dự án:
PNAME: tên của dự án PNUMBER: mã số dự án PLOCATION: nơi thực hiện dự án DNUM: mã số của phòng thực hiện dự án Quan hệ WORKS-ON chứa thông tin về thời gian làm việc của mỗi nhân viên:
ESSN: mã số của nhân viên PNO: mã số dự án mà nhân viên đó tham gia HOURS: số giờ mà nhân viên đó thực hiện Xét truy vấn SQL sau trên quan hệ EMPLOYEE trong bảng 1.1
Trang 9Và khối ngoài là:
SELECT LNAME, FNAME
WHERE SALARY > c Với c biểu diễn kết quả do khối trong trả lại Khối trong có thể được chuyển thành biểu thức quan hệ mở rộng như sau:
FMAX SALARY(DNO=5(EMPLOYEE))
Và khối ngoài được chuyển sang biểu thức quan hệ như sau:
LNAME, FNAME(SALARY>C (EMPLOYEE)) Sau đó bộ tối ưu truy vấn sẽ chọn một phương án thực hiện cho từng khối Chú ý rằng trong ví dụ ở trên khối trong chỉ cần thực hiện một lần để đưa ra lương lớn nhất, sau đó khối ngoài sử dụng lương lớn nhất này như là hằng số c Truy vấn đó gọi là truy vấn lồng nhau không liên kết Việc tối ưu các truy vấn lồng nhau liên kết sẽ khó khăn hơn nhiều [1, 5]
1.2 Các thuật toán cơ bản thực hiện phép toán truy vấn
Một hệ quản trị cơ sở dữ liệu (RDBMS) phải có các thuật toán để thực hiện các kiểu phép toán quan hệ khác nhau có thể xuất hiện trong một chiến lược thực hiện truy vấn Các phép toán bao gồm phép toán đại số quan hệ cơ bản và mở rộng, hoặc là tổ hợp các phép toán này Với mỗi phép toán (hoặc một tổ hợp phép toán) như thế, thường phải có sẵn một hoặc nhiều thuật toán
để thực hiện nó [1, 5, 6, 8]
1.2.1 Sắp xếp ngoài
Sắp xếp là một trong các thuật toán cơ bản được sử dụng trong xử lý truy vấn Ví dụ, khi một truy vấn SQL chỉ ra một mệnh đề Order by, kết quả truy vấn phải được sắp xếp Sắp xếp cũng là một bộ phận then chốt trong các thuật toán được sử dụng cho phép nối (Join) hoặc các phép toán khác như phép hợp (Union), phép giao (Intersection) và trong các thuật toán loại bỏ bản
Trang 10ghi trùng nhau đối với phép chiếu (Project) khi một truy vấn SQL chỉ ra tuỳ chọn Distinct trong mệnh đề Select
Sắp xếp ngoài đề cập đến các thuật toán sắp xếp phù hợp với các file lớn được lưu trữ trên đĩa mà không xếp vào bộ nhớ chính, ví dụ hầu hết các file cơ sở dữ liệu Thuật toán sắp xếp ngoài thường sử dụng chiến lược sắp xếp trộn, nó bắt đầu bằng việc sắp xếp các file con nhỏ, gọi là các run, của file chính và sau đó trộn các run đã được sắp xếp tạo nên các file con lớn hơn và các file con đó lại được trộn với nhau Giống như các thuật toán khác, thuật toán sắp xếp trộn đòi hỏi một không gian phòng đợi (buffer space) trong bộ nhớ chính, ở đó việc sắp xếp và trộn các run được thực hiện Thuật toán cơ bản được đưa ra ở hình 1.2 gồm hai giai đoạn: (1) giai đoạn sắp xếp, (2) giai đoạn trộn
Trong giai đoạn sắp xếp, các run của file có thể đặt vừa vào bộ đệm có sẵn sẽ được đọc vào trong bộ nhớ chính và được sắp xếp bằng cách dùng một thuật toán sắp xếp trong rồi được ghi trở lại vào đĩa như các file con được sắp xếp tạm thời Kích cỡ của run và số lượng run ban đầu (nR) được chỉ ra bởi các khối file (b) và không gian phòng đợi có sẵn (nB) Ví dụ: nếu nB=5 khối
và b=1024 khối thì nR=(b/nB) hoặc 205 run ban đầu Mỗi run có cỡ 5 khối (ngoại trừ run cuối cùng sẽ có 4 khối) Vì vậy, sau pha sắp xếp, 205 run được sắp xếp như là một file con trên đĩa [1,6]
Trang 11sort the records in the buffer and write as a temporary subfile;
i i + 1 ; }
Hình 1.2 Phác thảo của thuật toán sắp xếp trộn cho sắp xếp ngoài
Trong giai đoạn trộn, các run đã sắp xếp được trộn trong một hoặc nhiều đường (pass) Mức độ trộn (dM) là số các run có thể được trộn với nhau trong mỗi đường Trong mỗi đường, cần một khối phòng đệm để lưu các run
đã được trộn và cần một khối phòng đêm khác để lưu kết quả trộn Vì vậy dM
là số nhỏ hơn trong (nB-1) và nR, số các pass là (logdM(nR)) Trong ví dụ trên, dM=4 (trộn bốn đường), như vậy 205 run đầu tiên sẽ được trộn thành 52
Trang 12run ở cuối đoạn đầu tiên Sau đó chương trình trộn thành 13 run, tiếp đó thành
4 run và sau đó thành 1 file Điều đó nghĩa là cần 4 pass Cực tiểu dM của 2 cho thực hiện tồi nhất của thuật toán, đó là: (2*b)+(2*(b*(log2b))) Số hạng đầu tiên biểu diễn số các khối truy cập đối với giai đoạn sắp xếp, bởi vì mỗi khối được truy cập hai lần, một lần để đọc vào bộ nhớ và một lần để ghi các bản ghi trở lại đĩa sau khi đã sắp xếp Số hạng thứ hai biểu diễn số các khối truy cập đối với giai đoạn trộn, với giả thiết trường hợp xấu nhất dM của 2 Nói chung, log lấy cơ số dM và biểu thức đối với số khối truy cập trở thành: (2*b)+(2*(b*(logdMb)))
Có rất nhiều lựa chọn cho việc thực thi một phép toán SELECT Trong phần này, trình bầy một số thuật toán để thực thi phép SELECT Để minh hoạ, sử dụng các phép toán sau được chỉ ra trong cơ sở dữ liệu quan hệ của bảng 1.1 ở trang 7
(OP1): SSN=‟123456789‟(EMPLOYEE)
(OP2): DNUMBER>5(DEPARTMENT)
(OP3): DNO=5(EMPLOYEE)
(OP4): (DNO=5) AND (SALARY>3000) AND (SEX=‟F‟) (EMPLOYEE)
(OP5): (ESSN=‟123456789‟) AND (PNO=10)(WORK_ON)
Các phương pháp tìm kiếm đối với phép chọn đơn giản:
Có nhiều phương pháp tìm kiếm để chọn các bản ghi từ một file Chúng được biết đến như các bộ quét file để tìm kiếm và lấy ra các bản ghi thoả mãn điều kiện chọn Nếu thuật toán tìm kiếm đòi hỏi việc sử dụng chỉ số thì tìm kiếm chỉ số được gọi là quét chỉ số Các phương pháp tìm kiếm sau đây (từ S1 đến S6) là các ví dụ về các phương pháp tìm kiếm có thể được sử dụng để thực hiện phép toán chọn
S1: Tìm kiếm tuyến tính: lấy ra từng bản ghi trong file và kiểm tra xem các giá trị thuộc tính của chúng có thoả mãn điều kiện chọn hay không
Trang 13S2: Tìm kiếm nhị phân: nếu điều kiện chọn đòi hỏi một phép so sánh bằng trên thuộc tính khoá mà trên đó file được sắp xếp , thì tìm kiếm nhị phân (hiệu quả hơn tìm kiếm tuyến tính) sẽ được sử dụng Ví dụ trong OP1 nếu file EMPLOYEE được sắp xếp thứ tự theo thuộc tính SSN
S3: Sử dụng chỉ số sơ cấp: Nếu điều kiện chọn đòi hỏi một phép so sánh bằng trên một thuộc tính khoá với chỉ số sơ cấp Ví dụ trong OP1 nếu file EMPLOYEE có SSN=„123456789‟ thì sử dụng chỉ số sơ cấp để lấy ra các bản ghi Chú ý rằng điều kiện này lấy ra nhiều nhất là một bản ghi
S4: Sử dụng một chỉ số sơ cấp để lấy ra nhiều bản ghi: Nếu điều kiện
so sánh là >, >=, <, <= trên trường khoá Ví dụ: trong OP2 với file DEPARTMENT lấy ra những bản ghi có DNUMBER>5 thì sử dụng chỉ số để tìm bản ghi thoả mãn điều kiện bằng tương ứng (DNUMBER=5), sau đó lấy
ra tất cả các bản ghi tiếp theo bản ghi đó trong một file được sắp xếp Còn với điều kiện DNUMBER<5, thì lấy ra tất cả các bản ghi đi trước
S5: Sử dụng một chỉ số nhóm để lấy ra nhiều bản ghi: Nếu điều kiện chọn đòi hỏi một phép so sánh bằng trên thuộc tính không phải là khoá Ví dụ: DNO=5 trong OP3, hãy sử dụng chỉ số đó để lấy ra tất cả các bản ghi thoả mãn điều kiện
S6: Sử dụng chỉ số thứ cấp (B+
-tree) trên một phép so sánh bằng: Phương pháp này có thể được sử dụng để lấy ra một bản ghi đơn nếu trường chỉ số là một khoá hoặc lấy ra nhiều bản ghi nếu trường chỉ số không phải là khoá Phương pháp này cũng có thể sử dụng đối với các phép so sánh liên quan đến >, >=, <, <=
Phương pháp S1 áp dụng cho bất kỳ file nào, còn tất cả các phương pháp khác phụ thuộc vào có đường dẫn truy cập thích hợp trên thuộc tính được sử dụng trong điều kiện chọn Phương thức S4 và S6 có thể được sử dụng để lấy ra các bản ghi trong một phạm vi nhất định, ví dụ 30000<=SALARY<=35000 Các truy vấn bao gồm các điều kiện như thế được gọi là các truy vấn vùng
Trang 14Các phương pháp tìm kiếm cho lựa chọn phức tạp: Nếu điều kiện của phép SELECT là một điều kiện liên kết, tức là điều kiện đó được tạo thành từ nhiều điều kiện đơn, kết nối với nhau bằng toán tử logic liên kết AND như OP4, thì DBMS có thể sử dụng các phương pháp sau đây để thực thi
S7: Phép chọn có điều kiện liên kết sử dụng một chỉ số đơn: nếu một thuộc tính đòi hỏi bất kỳ điều kiện đơn giản nào trong điều kiện liên kết mà có một đường dẫn truy cập cho phép sử dụng một trong các phương thức từ S2 đến S6, thì hãy sử dụng điều kiện này để lấy ra các bản ghi và sau đó kiểm tra xem mỗi bản ghi lấy ra đó có thoả mãn các điều kiện đơn còn lại trong điều kiện liên kết hay không
S8: Phép chọn có điều kiện liên kết sử dụng chỉ số phức hợp: Nếu hai hay nhiều thuộc tính đòi hỏi so sánh bằng trong điều kiện liên kết và có tồn tại một chỉ số phức hợp (hoặc cấu trúc băm) trên các trường được tổ hợp, ví dụ: nếu một chỉ số được tạo ra trên khoá phức (ESSN, PNO) của file WORKS_ON trong OP5 thì có thể sử dụng chỉ số một cách trực tiếp
S9: Phép chọn có điều kiện liên kết bằng phép giao của các con trỏ bản ghi: Nếu các chỉ số thứ cấp (hoặc các đường dẫn truy nhập khác) là có trong điều kiện liên kết là đơn giản, và nếu các chỉ số đó chứa con trỏ bản ghi thì nó được sử dụng để lấy ra tập con trỏ bản ghi thoả mãn điều kiện đơn Giao của các tập con trỏ bản ghi này sẽ trả lại các con trỏ bản ghi thoả mãn điều kiện liên kết và được sử dụng để lấy ra các bản ghi một cách trực tiếp Nếu chỉ có một vài điều kiện có các chỉ số thứ cấp thì mỗi bản ghi được lấy ra sau đó sẽ được kiểm tra xem nó có thoả mãn các điều kiện còn lại hay không
Mỗi khi một điều kiện đơn đặc tả phép chọn, như là OP1, OP2 hoặc OP3, thì chỉ có thể kiểm tra xem trong điều kiện đó có tồn tại một đường dẫn truy cập trên thuộc tính không Nếu có tồn tại đường dẫn thì phương pháp tương ứng với đường dẫn đó được sử dụng, ngược lại phương pháp tìm kiếm tuyến tính S1 có thể được sử dụng Sự tối ưu hoá truy vấn đối với phép toán Select là cần thiết, nhất là đối với những điều kiện lựa chọn hội và với bất kỳ khi nào có nhiều hơn một thuộc tính được đòi hỏi trong điều kiện có đường
Trang 15dẫn Bộ tối ưu sẽ chọn đường dẫn để lấy ra các bản ghi theo cách hiệu quả nhất bằng cách ước tính các chi phí khác nhau và lựa chọn phương pháp có ước lượng chi phí tối thiểu
Khi bộ truy vấn lựa chọn giữa nhiều điều kiện đơn trong điều kiện liên kết, nó thường xem xét tính lựa chọn của từng điều kiện Tính lựa chọn (s) được định nghĩa là tỉ số giữa số bản ghi thoả mãn điều kiện trên tổng số bản ghi có trong file (hay quan hệ), và do đó giá trị này nằm giữa 0 và 1, nếu như
độ chọn lọc là 0 thì không có bản ghi nào thỏa mãn điều kiện và là 1 nếu tất
cả các bản ghi đều thoả mãn điều kiện Mặc dù độ chọn lọc chính xác của tất
cả các điều kiện có thể không sẵn có, sự ước lượng của độ chọn lọc được giữ trong danh mục DBMS và được sử dụng bởi bộ lọc Ví dụ, với điều kiện bằng trên thuộc tính khoá của quan hệ r(R), s=1/|r(R)| với |r(R)| là bản ghi trong quan hệ r(R) Với một điều kiện bằng trên thuộc tính có các giá trị phân biệt i,
s được ước lượng bởi (|r(R)|/i)/(|r(R)|) hoặc l/i, giả sử các bản ghi đó được phân bổ đều giữa các giá trị phân biệt Cùng với giả thiết này, |r(R)|/i bản ghi
sẽ thoả mãn một điều kiện bằng trên thuộc tính này Tổng quát, số các bản ghi thoả mãn một điều kiện lựa chọn với độ chọn lọc s được ước lượng là
|r(R)|)*s Ước lượng càng nhỏ thì độ thoả dụng càng cao
So sánh phép chọn có điều kiện đơn và điều kiện liên kết (AND), hoặc điều kiện tách rời (OR) (các điều kiện đơn giản được nối với nhau bởi toán tử kết nối logic OR hoặc AND) thì phép chọn có điều kiện tách khó xử lý và tối
ưu hơn Ví dụ, xét OP4‟:
(OP4‟): (DNO=5) OR (SALARY>3000) OR (SEX=‟F‟)(EMPLOYEE)
Với một điều kiện như vậy thì một phép tối ưu ít có thể được thực hiện bởi vì tất cả các bản ghi thoả mãn điều kiện là hợp của các bản ghi thoả mãn các điều kiện riêng lẻ Do đó, nếu bất kỳ một điều kiện nào không có một đường dẫn truy nhập thì chúng ta buộc phải sử dụng cách tìm kiếm tuyến tính Nếu đường dẫn truy nhập tồn tại trên từng điều kiện thì tối ưu hoá lựa chọn bằng cách lấy ra những bản ghi hoặc địa chỉ bản ghi thoả mãn điều kiện, và sau đó áp dụng phép toán tập hợp để loại trừ bản ghi giống nhau
Trang 161.2.3 Thực thi phép nối (JOIN)
Phép nối là một trong những phép toán tốn nhiều thời gian nhất trong
xử lý truy vấn Rất nhiều phép nối bắt gặp trong các truy vấn là nối bằng (EQUIJOIN) và nối tự nhiên (NATURAL JOIN) Trong chương này, khi nói nối có nghĩa là EQUIJOIN (hoặc NATURAL JOIN) Có nhiều cách để thực thi một phép nối 2 chiều, đó là một phép nối trên 2 file Các phép nối gồm nhiều hơn 2 file được gọi là phép nối nhiều chiều Trong phần này nói về các
kỹ thuật để thực thi phép nối 2 chiều
Xét các thuật toán đối với phép nối có dạng:
R A=B S Với A và B là các thuộc tính so sánh của R và S tương ứng Các phương pháp nối có thể được mở rộng thành một dạng nối tổng quát hơn Bốn
kỹ thuật phổ biến nhất cho việc thực hiện một phép nối được minh hoạ bằng các phép toán ví dụ sau:
(OP6): EMPLOYEE DNO=DNUMBER DEPARTMENT
(OP7): DEPARTMENT MGRSSN=SSN EMPLOYEE
Các phương pháp để thực thi phép nối [1, 6]:
J1 Nối lặp lồng nhau: Với mỗi bản ghi t trong R (vòng lặp ngoài), lấy
ra tất cả các bản ghi s từ S (vòng lặp trong) và kiểm tra xem nếu 2 bản ghi đó
có thoả điều kiện nối t[A]=s[B] hay không
J2 Nối lặp đơn: Nếu một chỉ số (hoặc một khoá băm) tồn tại với một trong 2 thuộc tính nối, ví dụ là B của S, lấy ra từng bản ghi t trong R, tại một thời điểm chỉ lấy ra 1 bản ghi (vòng lặp đơn), sau đó sử dụng cấu trúc truy nhập để lấy ra tất cả các bản ghi tương xứng s từ S thoả s[B]=t[A] một cách trực tiếp
J3 Sắp xếp trộn: Nếu các bản ghi của R và S được sắp xếp một cách vật lý (có thứ tự) bởi giá trị của các thuộc tính nối A và B một cách riêng biệt, khi đó có thể thực thi phép nối một hiệu quả Cả 2 file được quét đồng thời
Trang 17theo thứ tự của các thuộc tính nối và đối chiếu các bản ghi có cùng giá trị với
A và B Nếu các file không được sắp xếp thì trước tiên chúng được sắp xếp bằng cách sử dụng các thuật toán sắp xếp ngoài Trong phương pháp này, các cặp của các khối file được sao chép vào trong bộ đệm theo thứ tự và các bản ghi của từng file đó chỉ được quét một lần để đối chiếu với file khác trừ khi cả
A và B không là các thuộc tính khoá, trong trường hợp này thì phương pháp cần phải được sửa đổi phù hợp Phác hoạ của thuật toán sắp xếp trộn được đưa ra trong hình 1.3(a) R(i) được sử dụng để chỉ bản ghi thứ i trong R Sự khác nhau của sắp xếp trộn khi sử dụng các chỉ số thứ cấp tồn tại trên cả 2 thuộc tính nối Các chỉ số cung cấp khả năng quét các bản ghi theo thứ tự của các thuộc tính nối, nhưng bản thân các bản ghi lại nằm rải rác trên toàn bộ các khối file, vì vậy phương pháp này tỏ ra khá kém hiệu quả, bởi vì truy nhập vào các bản ghi có thể bao hàm việc truy cập đến một khối đĩa khác
(a) sort the tuples in R on attribute A; (assume R has n tuples (records))
sort the tuples in S on attribute B; (assume S has m tuples (records))
set i 1, j 1;
while ( i n) and (j m)
do{ if R(i) A > S(j) B then set j j +1
elseif R(i) A < S(j) B then set i i +1
else { (*R(i) A = S(j) B , so we output a matched tuple*)
output the combined tuple < R(i), S(j)> to T;
(* output other tuples that match R(i),if any*)
set l j +1;
while (l m) and (R(i)[A] = S(j)[B])
do { output the combined tuple < R(i), S(l)> to T;
set l l + 1
}
Trang 18(* output other tuples that match S(i),if any*)
(b) create a tuple t [ <attribute list>] in T‟ for each tuple t in R;
(* T‟ contains the projection result before duplicate elimination*)
if <attribute list> includes a key of R then T T‟
else { sort the tuples in T‟;
set i 1, j 2;
while i n do
{ output the tuple T‟(i) to T;
while T‟[i] = T‟[j] and j n do j j + 1; (*eliminate duplicates*)
i j; j i +1
}
}
(* T conntains the projeclion result after duplicate elimination*)
Hình 1.3 Thực thi phép toán JOIN, PROJECT, UNION, INTERSECTION và SET DIFFERENCE sử dụng sắp xếp trộn với R có n bộ giá trị và S có m bộ giá trị (a) Thực thi phép toán T R A=B S, (b) thực thi phép T <attribute list> (R)
J4 Nối băm (hash join): Các bản ghi của các file S và R đều đƣợc băm vào 1 file băm nhƣ nhau, sử dụng cùng hàm băm nhƣ nhau trên các thuộc tính
Trang 19nối A của R và B của S như là các khoá băm Đầu tiên, một lần truy cập qua file có số bản ghi ít hơn (ví dụ là R) băm các bản ghi của nó vào file băm; công việc đó được gọi là pha phân mảnh bởi vì các bản ghi của R được phân mảnh vào trong vùng băm Pha tiếp theo được gọi là pha tham dò, một lần truy cập qua file khác (file S) và băm từng bản ghi của S để thăm dò vùng tương ứng và các bản ghi trên được kết hợp với tất cả các bản ghi tương xứng
if (i <= n) then add tuples R(i) to R(n) to T;
if (j <= m) then add tuples s(J) to S(m) to T;
(d) sort the tuples in R and R using the same unique sort attribules; set i 1; j 1;
while( i <= n) and (j <= m)
do { if R (i)>S(j) then set j <- j+1
elseif R(i) < S(j) then set i<-i+1
else { output R(i) to T;
Trang 20Do { if R(i)>S(j) then set j j + 1
elseif R(i) < S(j) then { output R(i) to T
set i i+1
}
else set i i+1, j j+1
}
If (i<=n) then add tuplessR(i) to R(n) to T;
Hình 1.3 Thực thi phép JOIN, PROJECT, UNION, INTERSECTION và SET DIFFERENCE sử dụng sắp xếp trộn với R có n bộ giá trị và S có m bộ giá trị
Trong phép nối lặp lồng nhau, nó tạo ra một sự khác nhau giữa file đƣợc chọn cho vòng lặp ngoài và file đƣợc chọn cho vòng lặp trong Nếu EMPLOYEE đƣợc sử dụng cho vòng lặp ngoài, mỗi khối của EMPLOYEE đƣợc đọc một lần và bản thân file DEPARTMENT (với từng khối của nó) đƣợc đọc 1 lần cho mỗi lần lặp ứng với (nB-2) khối của file EMPLOYEE Kết quả là thu đƣợc công thức sau [6]:
Tổng số lần truy cập khối cho file ngoài = bE
Số lần truy cập của (nB-2) khối đối với vòng lặp ngoài = (bE/(nB-2) Tổng số lần truy cập khối cho file trong là = bD*(bE/(nB-2)
Do đó tổng số các lần truy cập khối đƣợc tính theo công thức sau:
bE + ((bE/(nB-2)*bD) = 2000 + ((2000/5)*10) = 6000 lần truy cập khối
Trang 21Mặt khác, nếu sử dụng các bản ghi DEPARTMENT trong vòng lặp ngoài, theo tính đối xứng thì thu được tổng số lần truy cập khối là:
bD + ((bD/(nB-2) * bE) = 10 + (10/5) *2000)=4010 lần truy cập khối Thuật toán nối sử dụng một bộ đệm để lưu các bản ghi được nối của file kết quả Mỗi khi bộ đệm đầy, nó sẽ được viết vào trong đĩa để sử dụng lại Nếu file kết quả của phép nối có bRES khối đĩa, mỗi một khối sẽ được viết một lần, do đó truy cập khối bRES nên được thêm trước vào công thức để ước lượng giá của phép nối
Có những nhân tố khác ảnh hưởng đến sự thực hiện của một phép nối, đặc biệt phương pháp nối lặp đơn J2 đó là tỉ lệ phần trăm của các bản ghi trong một file sẽ được nối với các bản ghi trong file khác Điều đó gọi là nhân
tố lựa chọn nối của một file có điều kiện EQUIJOIN với file khác Nhân tố này phụ thuộc vào điều kiện nối bằng cụ thể giữa 2 file Để giải thích cho điều này, xét OP7: nối mỗi bản ghi của file DEPARTMENT với bản ghi của file EMPLOYEE cho nhà quản lý của từng phòng ban đó Ở đây, mỗi bản ghi DEPARTMENT (có 50 bản ghi) được chờ để nối với từng bản ghi đơn EMPLOYEE, nhưng rất nhiều bản ghi EMPLOYEE (4950 bản ghi không phải là người quản lý phòng ban) sẽ không được nối
Giả sử rằng các chỉ số thứ cấp tồn tại trên các thuộc tính SSN của EMPLOYEE và MGRSSN của DEPARTMENT với số mức chỉ số xSSN=4 và
xMGRSSN=2
Khi đó có 2 lựa chọn để thực hiện phương pháp J2 Đầu tiên là việc lấy
ra từng bản ghi EMPLOYEE và sử dụng chỉ số trên MGRSSN của DEPARTMENT để thìm ra các bản ghi trong DEPARTMENT tương xứng Trong trường hợp này, không có bản ghi nào tương xứng được tìm thấy cho các nhân viên không quản lý một phòng ban nào cả
Số lần truy cập khối cho trường hợp này xấp xỉ:
bE + (rE*(xMGRSSN+1))=2000 + (5000*3) = 17000 lần truy cập khối
Trang 22Lựa chọn thứ 2 là lấy ra từng bản ghi DEPARTMENT và sau đó sử dụng chỉ số trên SSN của EMPLOYEE để tìm ra bản ghi EMPOYEE quản lý tương xứng Trong trường hợp này, mỗi bản ghi DEPARTMENT sẽ cho một bản ghi EMPOYEE tương xứng Số lần truy cập khối cho trường hợp này xấp
xỉ là:
bD + (rD*(xSSN+1))=10+(50*5)=260 lần truy cập khối
Lựa chọn thứ 2 hiệu quả hơn bởi vì nhân tố chọn nối của DEPARTMENT đối với điều kiện nối SSN=MGRSSN là 1, trong khi nhân tố chọn nối của EMPLOYEE với điều kiện là (50/5000) hoặc 0.01 Với phương pháp J2, hoặc file nhỏ hơn hoặc file có sự tương xứng với từng bản ghi (đó là file với nhân tố chọn nối cao) nên được sử dụng trong nối lặp ngoài Có thể tạo một chỉ số đặc biệt cho việc thực hiện phép nối nếu như chưa có chỉ số nào tồn tại
Sắp xếp trộn J3 là hiệu quả nếu các file đã được sắp xếp bởi thuộc tính nối của chúng Do đó, số các khối được truy nhập bằng tổng các khối trong cả
2 file Với phương pháp này cả OP6 và OP7 sẽ cần bE + bD=2000 +10 =2010 lần truy cập khối Tuy nhiên, cả 2 file này được sắp xếp theo các thuộc tính nối; nếu một hoặc 2 file chưa được sắp xếp thì chúng cần phải được sắp xếp cho việc thực thi phép nối Nếu ước lượng giá của việc sắp xếp một file ngoài
là (blog2b) lần truy cập khối và nếu cả 2 file cần được sắp xếp thì tổng giá của phép sắp xếp trộn có thể ước lượng bởi (bE + bD + bElog2bE + bDlog2bD)
1.2.4 Thực thi phép chiếu và các phép toán tập hợp
Một phép chiếu <danh sách thuộc tính>(R) dễ thực thi nếu <danh sách thuộc tính> bao gồm một khoá của quan hệ R, bởi vì trong trường hợp này kết quả của thao tác sẽ có số bản ghi cùng số bản ghi của R nhưng chỉ có các giá trị trong <danh sách thuộc tính> Nếu <danh sách thuộc tính> không chứa một khoá của R, các bộ giá trị trùng lặp phải được loại trừ Việc này thông thường được thực hiện bằng việc sắp xếp kết quả của phép toán và sau đó loại trừ các
bộ giá trị trùng lặp xuất hiện liên tiếp sau khi sắp xếp Một phác hoạ của thuật toán được đưa ra trong hình 1.3(b) Việc băm có thể cũng được sử dụng để
Trang 23loại trừ trùng lặp: bởi từng bản ghi được băm và chèn vào một khối của file băm trong bộ nhớ, file băm được kiểm tra lại xem bản ghi đã có trong vùng
đó chưa, nếu có rồi thì sẽ không chèn vào nữa File băm có ích đối với truy vấn SQL với mặc định không loại trừ các bản ghi trùng nhau trong kết quả truy vấn; chỉ nếu từ khoá DISTINCT được đưa vào trong câu truy vấn thì các
bộ giá trị trùng lặp mới được loại bỏ khỏi kết quả của câu truy vấn
Các phép toán tập hợp – UNION (hợp), INTERSECTION (giao), SET DIFFERENCE (trừ) và CARTESIAN PRODUCT (tích Đề Các) thực thi đôi lúc khá tốn kém Đặc biệt phép tích Đề Các RxS rất tốn kém bởi kết quả của
nó bao gồm số rất lớn các bản ghi (từng bản ghi của R kết hợp với tất cả các bản ghi của S) Thêm vào đó các thuộc tính của kết quả bao gồm tất cả các thuộc tính của R và S Nếu R có n bản ghi và j thuộc tính, S có m bản ghi và k thuộc tính, quan hệ kết quả sẽ có n*m bản ghi và j+k thuộc tính Do đó, tránh phép toán tích Đề Các và thay thế bằng các phép toán khác tương đương trong khi tối ưu truy vấn là rất quan trọng [5]
Ba phép toán quan hệ - hợp, giao, trừ - chỉ áp dụng với các quan hệ tương thích nhau, các quan hệ có cùng số thuộc tính và cùng miền thuộc tính Cách thông thường để thực thi các phép toán này là sử dụng sự thay đổi của
kỹ thuật sắp xếp trộn: 2 quan hệ được sắp trên cùng các thuộc tính, và sau khi sắp xếp thì chỉ một lần quét qua từng quan hệ là đủ để đưa ra kết quả Ví dụ thực thi phép toán hợp, R S, bằng việc quét và trộn các file đồng thời, và nếu có bộ giá trị như nhau tồn tại trong cả 2 quan hệ thì chỉ một bộ được giữ lại trong kết quả trộn Với phép toán giao, R S, thì chỉ giữ trong kết quả trộn những bộ kết quả nào có mặt trong cả 2 quan hệ R và S Hình 1.3(c) đến (e) là phác hoạ của việc thực thi các phép toán này bằng việc sắp xếp và trộn Nếu như sắp xếp được thực hiện trên các thuộc tính khoá duy nhất, các phép toán này sẽ đơn giản hơn
Trộn file cũng được sử dụng để thực hiện phép hợp, giao và trừ Một bảng được phân mảnh và bảng khác được sử dụng để thăm dò mảnh tương ứng Ví dụ, để thực thi phép RS thì đầu tiên phân mảnh các bản ghi của R
Trang 24và sau đó băm các bản ghi của S, nhưng chỉ chèn các bản ghi giống nhau vào trong bộ nhớ Để thực thi R S, đầu tiên phân mảnh các bản ghi của R vào trong một file băm Sau đó, trong khi băm từng bản ghi của S, thăm dò và kiểm tra nếu chính bản ghi từ S được tìm thấy trong vùng nhớ thì thêm bản ghi đó vào file kết quả Để thực thi R – S, đầu tiên băm các bản ghi của R vào trong vùng nhớ Trong khi băm từng bản ghi của S, nếu đúng bản ghi đó tìm thấy trong vùng nhớ thì xoá bản ghi khỏi vùng nhớ
1.2.5 Thực thi các phép toán kết hợp
Các phép toán kết hợp (MIN, MAX, COUNT, AVERAGE, SUM) khi
áp dụng vào bảng thì có thể được thực hiện bởi một lần quét bảng hoặc bằng việc sử dụng một chỉ số thích hợp nếu có Ví dụ xét truy vấn sau:
SELECT MAX(SALARY)
FROM EMPLOYEE;
Nếu một chỉ số (tăng dần) trên SALARY tồn tại cho quan hệ EMPLOYEE thì bộ tối ưu có thể chọn việc sử dụng chỉ số để tìm kiếm giá trị lớn nhất theo con trỏ phải nhất Nút đó chứa giá trị lương lớn nhất Trong hầu hết các trường hợp, cách này có hiệu quả hơn so với việc quét toàn bộ bảng của EMPLOYEE, bởi không có bản ghi chính xác được lấy ra Phép toán MIN thực hiện tương tự, và con trỏ trái nhất được lấy ra Nút đó chứa giá trị lương nhỏ nhất
Khi mệnh đề GROUP BY được sử dụng trong truy vấn, phép toán kết hợp phải được áp dụng cho từng nhóm của các bộ giá trị Do đó, bảng đầu tiên phải được phân mảnh thành các tập con các bộ giá trị, ở đó mỗi mảnh có cùng giá trị đối với các thuộc tính nhóm Trong trường hợp này việc tính toán trở nên phức tạp hơn Xét truy vấn sau:
SELECT DNO, AVR(SALARY)
FROM EMPLOYEE
GROUP BY DNO;
Trang 25Kỹ thuật thông thường cho các truy vấn như thế này là đầu tiên sắp xếp hoặc băm trên các thuộc tính nhóm để phân mảnh file vào trong các nhóm thích hợp Sau đó thuật toán sẽ tính toán hàm kết hợp cho các bộ giá trị trong từng nhóm, các bộ giá trị này có giá trị chung trong thuộc tính nhóm Trong truy vấn ví dụ trên, tập hợp của các bộ giá trị cho từng số phòng ban được nhóm lại với nhau vào một mảnh và tính toán giá trị trung bình cho từng nhóm
Chú ý rằng nếu một chỉ số nhóm tồn tại trên các thuộc tính nhóm thì các bản ghi đã được phân mảnh vào trong các tập con tương ứng Trong trường hợp này nó chỉ cần thiết áp để áp dụng việc tính toán cho từng nhóm
1.2.6 Thực thi phép nối ngoài - Outer Join
Phép nối ngoài có 3 tham số: nối ngoài phải, nối ngoài trái và nối ngoài tổng hợp Dưới đây là một ví dụ của phép nối ngoài trái trong SQL2:
SELECT LNAME, FNAME, DNAME
FROM (EMPLOYEE LEFT OUTER JOIN DEPARTMENT ON
DNO=DNUMBER);
Kết quả của truy vấn này là một bảng với tên của nhân viên và các phòng ban phụ trách của họ Nó tương tự kết quả nối thông thường (nối trong), ngoại trừ trường hợp là: nếu một bộ giá trị EMPLOYEE (một bộ giá trị trong quan hệ trái) không có một phòng ban nào phụ trách thì tên của nhân viên vẫn xuất hiện trong bảng kết quả nhưng tên phòng ban sẽ có giá trị null với các bộ giá trị như thế trong kết quả truy vấn [6]
Nối ngoài có thể được tính toán bằng việc sửa một trong các thuật toán nối như nối lặp lồng nhau hoặc nối lặp đơn Ví dụ, để tính toán một phép nối ngoài trái, khi đó sử dụng quan hệ bên trái cho vòng lặp ngoài hoặc lặp đơn bởi vì mọi bộ giá trị trong quan hệ trái phải có trong kết quả Nếu có các bộ giá trị tương xứng trong quan hệ kia thì các bộ giá trị để nối đó được đưa ra
và lưu trong kết quả Tuy nhiên, nếu không tìm thấy bộ giá trị nào của quan
hệ kia thì bộ giá trị trong quan hệ trái vẫn được đưa vào kết quả nhưng được
Trang 26thêm vào các giá trị null Thuật toán sắp xếp trộn và nối băm cũng có thể được mở rộng để tính toán cho các phép nối ngoài
Phép nối ngoài có thể được tính toán bằng việc thực một phép nối của các phép toán đại số quan hệ Ví dụ, phép nối ngoài trái thể hiện ở trên tương đương với một loạt các phép toán quan hệ sau:
1 Tính toán nối trong của bảng EMPLOYEE và DEPARTMENT
TEMP1 LNAME,FNAME,DNAME(EMPLOYEE DNO=DNUMBER
DEPARTMENT)
2 Tìm các bộ giá trị EMPLOYEE không xuất hiện trong kết quả
của phép nối trong TEMP2 LNAME,FNAME(EMPLOYEE) - LNAME,FNAME(TEMP1)
3 Thêm vào mỗi bộ trong TEMP2 các giá trị null cho trường
DNAME TEMP2 TEMP2 x „null‟
4 Áp dụng phép toán hợp TEMP1 với TEMP2 để đưa ra kết quả
của phép nối ngoài trái
RESULT TEMP1 TEMP2 Giá của phép nối ngoài được tính toán ở trên sẽ là tổng giá của các bước kết hợp (nối trong, tích Đề các, hợp) Tuy nhiên chú ý rằng bước 3 có thể được thực hiện như một quan hệ tạm thời đang được xây dựng trong bước
2, thêm vào mỗi bộ kết quả một giá trị null Trong bước 4, hai toán hạng của phép hợp không phải các bộ giá trị chung do đó không cần phải loại trừ trùng lặp
Một truy vấn được chỉ ra trong SQL sẽ được chuyển thành một biểu thức đại số quan hệ đó là một dãy các phép toán quan hệ Nếu thực hiện một phép toán đơn tại một thời điểm, thì phải sinh ra các file tạm thời trên
Trang 27đĩa để lưu các kết quả của các phép toán này dẫn đến chi phí thừa Việc sinh ra và sắp xếp các file trên đĩa tốn thời gian không cần thiết trong nhiều trường hợp, bởi vì các file này ngay lập tức được sử dụng như đầu vào của phép toán tiếp theo Để giảm số file tạm thời, cách phổ biến là sinh ra các mã thực thi truy vấn tương ứng với các thuật toán để kết hợp các phép toán trong truy vấn
Ví dụ, thay vì được thực thi một cách độc lập, một phép nối có thể được kết hợp với 2 phép toán là phép chọn trên các file đầu vào và phép chiếu cuối cùng trên file kết quả; toàn bộ việc này được thực thi bởi một thuật toán với 2 file đầu vào và một file đầu ra Thay vì tạo ra 4 file tạm thời, nên áp dụng thuật toán trực tiếp và chỉ lấy một file kết quả Khi các
bộ kết quả của phép toán được đưa ra, các bộ kết quả này lại là các đầu vào của các phép toán tiếp theo Ví dụ, nếu một phép nối theo sau 2 phép chọn trên các quan hệ ban đầu, kết quả các bộ giá trị từ mỗi phép chọn được cung cấp giống như đầu vào của thuật toán nối trong luồng hoặc đường ống
1.3 Sử dụng các luật dự đoán trong tối ưu truy vấn
Một trong những luật dự đoán chính là việc áp dụng phép SELECT và PROJECT trước khi áp dụng lệnh JOIN hoặc các phép toán nhị phân khác Bởi kích thước của file kết quả từ một phép toán nhị phân như JOIN làm tăng kích thước của file kết quả so với các file đầu vào Phép toán SELECT và PROJECT lại làm giảm kích thước của một file, do đó nên được áp dụng trước một phép nối hoặc phép nhị phân
1.3.1 Các ký hiệu với cây truy vấn và đồ thị truy vấn
Một cây truy vấn là một cấu trúc dữ liệu cây tương ứng với một biểu thức đại số quan hệ Nó thể hiện các quan hệ đầu vào của truy vấn như là các nút lá của cây, và thể hiện các phép toán đại số quan hệ như các nút trong Thực thi một cây truy vấn bao gồm việc thực hiện các phép toán nút trong mỗi khi các toán hạng sẵn sàng và sau đó thay thế nút trong đó bởi quan hệ
Trang 28kết quả (là kết quả của việc thực hiện phép toán) Giai đoạn cuối của việc thực thi là khi gốc đƣợc thực thi và đƣa ra quan hệ kết quả cho truy vấn
P.PNUMBER, P.DNUM, E.LNAME, E.ADDRESS, E.BDATE
Trang 29Hình 1.4(a) thể hiện một cây truy vấn Q2: Với một dự án tại
“Stafford”, lấy ra số dự án, số phòng quản lý, và họ, địa chỉ, ngày sinh của người quản lý phòng đó Truy vấn này được chỉ ra trên một sơ đồ quan hệ của bảng 1.1 ở trang 7 và tương ứng với biểu thức đại số quan hệ:
PNUMBER,DNUM,LNAME,ADDRESS,BDATE(((PLOCATION=‟Stafford‟(PROJECT))
D NUM=DNUMBR(DEPARTMENT)) MGRSSN=SSN(EMPLOYEE))
[P.PNUMBER,P.DNUM] [E.LNAME,E.ADDRESS,E.BDATE] (c)
P P.DNUM= D.DNUBER D D.MGRSSN=E.SSN E
‘Stafford’
P.PLOCATION= ‘Stafford’
Hình 1.4(c) Đồ thị truy vấn
cho Q2
Trang 30Biểu thức này tương ứng với truy vấn SQL sau:
Q2: SELECT P.PNUMBER, P.DNUM, E.LNAME, E.ADDRESS, E.BDATE FROM PROJECT AS P, DEPARTMENT AS D, EMPLOYEE AS E WHERE (P.DNUM=D.DNUMBER) AND (D.MGRSSN=E.SSN) AND
(P.PLOCATION=‟Stafford‟);
Trong hình 1.4(a) 3 quan hệ PROJECT, DEPARTMENT, EMPLOYEE được thể hiện bởi các lá P, D, E Các phép toán đại số quan hệ của biểu thức được thể hiện bởi các nút trong Khi cây truy vấn này được thực thi, nút được đánh dấu (1) trong hình 1.4(a) phải được bắt đầu thực thi trước nút (2) bởi vì một số bộ kết quả của phép toán (1) phải sẵn sàng trước khi bắt đầu thực thi phép toán (2) Một cách tương tự, nút (2) được thực thi và đưa ra kết quả trước khi nút (3) bắt đầu thực thi và tiếp tục như vậy
Như vậy, cây truy vấn thể hiện một thứ tự cụ thể của các phép toán thực hiện một truy vấn Một miêu tả rõ ràng hơn của một truy vấn là đồ thị truy vấn Hình 1.4(c) thể hiện một đồ thị truy vấn cho truy vấn Q2 ở trên Các quan hệ trong truy vấn được thể hiện bởi các nút quan hệ, các nút này được biểu diễn bởi vòng tròn đơn Các giá trị hằng số, đặc trưng từ các điều kiện chọn truy vấn được thể hiện bởi các nút hằng số và biểu diễn bởi hình tròn kép Các điều kiện nối và chọn được thể hiện bởi các cạnh của đồ thị như hình 1.4(c), các thuộc tính được lấy ra từ mỗi quan hệ được thể hiện trong cặp dấu ngoặc vuông “[ ]” bên trên mỗi quan hệ
Biểu diễn bằng đồ thị truy vấn không chỉ ra thứ tự các phép toán được thực hiện đầu tiên Chỉ có duy nhất một đồ thị đơn tương xứng với từng truy vấn Mặc dù một số kỹ thuật tối ưu được dựa vào các đồ thị truy vấn, nhưng cây truy vấn được dùng nhiều hơn bởi vì trên thực tế bộ tối ưu truy vấn cần thể hiện một thứ tự các phép toán cho việc thực thi truy vấn, mà điều này thì trong đồ thị truy vấn không có được
Trang 311.3.2 Tối ưu kinh nghiệm của các cây truy vấn
Có nhiều biểu thức đại số quan hệ khác nhau và do đó có rất nhiều cây truy vấn khác nhau, có thể tương đương Bộ phân tích truy vấn sẽ sinh ra một cây truy vấn khởi tạo tương ứng với một truy vấn SQL mà không thực hiện bất kỳ phép tối ưu nào Ví dụ, với truy vấn có các phép chọn – chiếu - nối như Q2, cây truy vấn khởi tạo thể hiện trong hình 1.4(b) Tích Đề Các của các quan hệ chỉ ra trong mệnh đề FROM được áp dụng trước tiên; sau đó các điều kiện chọn và nối của mệnh đề WHERE được áp dụng, tiếp đến là phép chiếu trên các thuộc tính của mệnh đề SELECT Một cây truy vấn trên là đúng quy tắc thể hiện một biểu thức đại số quan hệ nhưng rất kém hiệu quả nếu thực thi trực tiếp do các phép tích Đề Các (X) Bởi nếu các quan hệ PROJECT, DEPARTMENT và EMPLOYEE có kích thước bản ghi 100, 50 và 150 byte
và chứa 100, 20, 5000 bộ dữ liệu riêng biệt, kết quả của phép toán tích Đề Các sẽ bao gồm 10 triệu bộ bản ghi và kích thước mỗi bản ghi là 300 byte Công việc của bộ tối ưu truy vấn dự đoán là chuyển cây truy vấn khởi tạo thành cây truy vấn cuối cùng được thực thi một cách hiệu quả
Bộ tối ưu phải bao gồm các luật đối với sự tương đương giữa các biểu thức đại số quan hệ có thể được áp dụng cho cây ban đầu Sau đó các luật tối
ưu truy vấn dự đoán sẽ sử dụng các biểu thức tương đương để chuyển cây ban đầu thành cây truy vấn tối ưu cuối cùng
Có rất nhiều luật để chuyển phép toán đại số quan hệ sang các phép toán tương đương Do đó, nếu 2 quan hệ có cùng tập thuộc tính theo một thứ
tự khác nhau nhưng cả hai quan hệ biểu diễn thông tin như nhau thì xem các quan hệ là tương đương Xét một số luật chuyển thường được dùng trong tối
ưu truy vấn [4, 6, 7]
1 Trong một phép chọn có điều kiện liên kết thì có thể chuyển thành một dãy các phép chọn với điều kiện của từng phép chọn là điều kiện con thành phần
C1 AND C2 AND, AND Cn(R) C1(C2( (Cn(R)) ))
Trang 322 Phép chọn có tính chất giao hoán:
C1(C2(R)) C2(C1(R))
3 Trong một dãy các phép chiếu , toàn bộ có thể đƣợc bỏ qua ngoại trừ phép cuối cùng
list1(list2( (listn(R)) )) list1(R)
4 Giao hoán của phép với phép : Nếu điều kiện chọn c bao gồm chỉ các thuộc tính A1, A2, An trong danh sách chiếu, 2 phép toán có thể đƣợc giao hoán cho nhau
A1, A2, ,An(C(R)) C(A1, A2, ,An(R))
5 Giao hoán của phép nối (và phép tích Đề các x): Phép có tính chất giao hoán giống phép x
R C S S C R
R x S S x R Thứ tự của các thuộc tính có thể không giống nhau trong các quan hệ kết quả nhƣng ý nghĩa là nhƣ nhau vì thứ tự của các thuộc tính là không quan trọng
6 Giao hoán của phép chiếu với phép nối (hoặc phép x): nếu tất cả các thuộc tính trong điều kiện chọn c chỉ bao gồm các thuộc tính của một trong các quan hệ đƣợc nối, ví dụ là R, hai phép toán có thể giao hoán với nhau
C( R S) (C(R)) S Nếu điều kiện chọn c có thể đƣợc viết nhƣ (c1 AND c2), với điều kiện c1 chỉ chứa các thuộc tính của R và điều kiện c2 chỉ chứa các thuộc tính của
S, giao hoán của các phép toán nhƣ sau:
C( R S) (c1(R)) (c2(S))
Trang 33Áp dụng các luật một cách tương tự nếu phép được thay bởi một phép toán x
7 Giao hoán với (hoặc x): Giả sử rằng danh sách chiếu là L={A1, ,An, B1, ,Bm}, với A1, ,An là các thuộc tính của R và B1, ,Bm là các thuộc tính của S Nếu điều kiện nối c chỉ chứa các thuộc tính trong L thì 2 phép toán này có thể giao hoán như sau:
L(R C S) (A1, ,An(R)) C ((B1, ,Bm(S)) Nếu điều kiện nối c chứa thêm các thuộc tính không có trong L, các thuộc tính này phải được đưa thêm vào danh sách chiếu vì chúng cần đến phép cuối cùng Ví dụ, nếu các thuộc tính An+1, ., An+k của R và Bm+1, ,Bm+p của S được chứa trong điều kiện nối c nhưng chúng không có trong danh sách chiếu L, các phép toán này giao hoán như sau:
L(R c S) (A1, ,An,An+1, ,An+k(R)) c ((B1, ,Bm, Bm+1, ,Bm+p(S)) Với phép x, không có điều kiện c do đó luật chuyển đầu tiên luôn luôn
áp dụng bằng việc thay thế c bởi x
8 Tính chất giao hoán của các phép toán tập hợp Các phép toán tập hợp: phép giao () và phép hợp () có tính chất giao hoán nhưng phép trừ (–) thì không
9 Tính chất kết hợp của , x, và : gọi là 1 trong các phép toán này thì chúng ta có
Trang 3412 Chuyển một dãy các phép toán (, x): Nếu c là điều kiện của một phép và tiếp sau là một phép x tương ứng với một điều kiện nối thì chuyển dãy các phép toán (, x) sang phép như sau:
c(R x S) (R C S) Ngoài ra có thể dùng nhiều cách biến đổi khác, ví dụ một điều kiện chọn hoặc nối c có thể được chuyển sang một điều kiện tương đương bằng việc sử dụng các luật sau (các luật của DeMorgan)
NOT (c1 AND c2) (NOT c1) OR (NOT c2) NOT (c1 OR c2) (NOT c1) AND (NOT c2) Vấn đề đặt ra là làm thế nào để các phép biến đổi có thể được sử dụng trong tối ưu dự đoán
Ví dụ về việc chuyển một truy vấn Xét truy vấn Q trên cơ sở dữ liệu của bảng 1.1 ở trang 7: “Tìm họ của những nhân viên sinh sau năm 1957, những nhân viên này làm việc cho dự án có tên là „Aquarius‟ ” Truy vấn này
có thể được biểu diễn bởi câu SQL sau:
Trang 35x BDATE>‘1957-12-31’
x PNAME=‘Aquarius’
Trang 36Hình 1.5 Các bước trong việc chuyển một cây truy vấn trong thời
gian thực hiện tối ưu dự đoán
(a) Cây truy vấn ban đầu (đúng quy tắc) cho truy vấn SQL
Trang 37Sử dụng các luật để chuyển cây truy vấn ban đầu sang cây tối ưu thực thi hiệu quả hơn
1 Sử dụng luật 1, chuyển các phép SELECT với các điều kiện hội thành một dãy các phép SELECT Điều này cho phép mức độ tự do lớn hơn trong việc chuyển các phép SELECT xuống các nhánh khác của cây
2 Sử dụng luật 2, 4, 6 và 10 phối hợp tính chất giao hoán của phép SELECT với các phép toán khác, chuyển mỗi phép SELECT xuống dưới càng xâu trong cây truy vấn càng tốt bởi các thuộc tính được bao hàm trong điều kiện chọn
3 Sử dụng luật 5 và 9 phối hợp tính chất giao hoán và kết hợp của các phép toán nhị phân, sắp xếp lại các nút lá của cây
4 Sử dụng luật 12, kết hợp một phép CARTESIAN PRODUCT với một dãy phép SELECT trên cây được thay thế bằng phép JOIN, nếu điều kiện biểu thị một điều kiện nối
5 Sử dụng luật 3, 4, 7 và 11 phối hợp dãy các phép PROJECT
và giao hoán của phép PROJECT với các phép toán khác, phân nhỏ và chuyển danh sách các thuộc tính chiếu xuống dưới cây càng xâu càng tốt bằng việc tạo ra các phép PROJECT mới khi cần thiết Sau mỗi phép PROJECT chỉ nên giữa lại các thuộc tính cần thiết trong kết quả truy vấn
và trong các phép toán tiếp theo
6 Các cây con biểu diễn các nhóm phép toán có thể được thực hiện bởi một thuật toán đơn
Trang 3837
Trong ví dụ trên, hình 1.5(b) thể hiện cây của hình 1.5(a) sau khi áp dụng bước 1 và 2 của thuật toán; hình 1.5(c) thể hiện cây sau bước 3; hình 1.5(d) sau bước 4; Hình 1.5(e) sau bước 5 Trong bước 6 nhóm các phép toán trong cây con lại với nhau với gốc của chúng là phép ESSN vào trong một thuật toán đơn và nhóm các phép toán còn lại vào trong cây con khác với gốc
là phép ESSN bởi vì nhóm đầu tiên có nghĩa là cây con này sẽ được thực thi trước tiên
Dự đoán chính là áp dụng các phép toán để trước tiên giảm kích thước của các kết quả trung gian Dự đoán bao gồm việc thực hiện các phép SELECT làm giảm số bản ghi và các phép PROJECT để giảm các thuộc tính Điều này được thực hiện bằng việc chuyển các phép SELECT và PROJECT xuống dưới càng xâu trong cây càng tốt Thêm vào đó, các phép SELECT và JOIN làm giảm số bộ giá trị và kích thước của file , do đod nên được thực thi trước các phép toán tương tự khác Thực hiện điều này bằng cách sắp xếp lại các nút lá của cây để tránh các phép CARTESIAN PRODUCT và điều chỉnh phần còn lại của cây sao cho thích hợp
1.3.3 Chuyển cây truy vấn thành phương án thực thi truy vấn
Một phương án thực thi của một biểu thức đại số quan hệ được biểu diễn bởi một cây truy vấn bao gồm thông tin về các phương thức truy nhập sẵn sàng cho mỗi một quan hệ cũng như các thuật toán được sử dụng trong việc tính toán các phép toán quan hệ được biểu diễn trong cây Ví dụ xét truy vấn Q1 với biểu thức quan hệ tương ứng có nó là:
FNAME,LNAME,ADDRESS(DNAME=‟RESEARCH‟ (DEPARTMENT) DNUMBER=DNO
EMPLOYEE)
Xét cây truy vấn được thể hiện trong hình 1.6 Để chuyển cây này sang một phương án thực thi, bộ tối ưu có thể chọn một chỉ số cho phép SELECT (giả sử có một chỉ số tồn tại), một lần quét bảng như một phương thức truy nhập đối với EMPLOYEE, thuật toán nối lặp lồng nhau cho phép JOIN và một lần quét kết quả của phép JOIN đối với phép PROJECT Thêm vào đó,
FNAME, LNAME, ADDRESS
Trang 39tiếp cận thực hiện một truy vấn có thể chỉ rõ sự vật chất hoá hoặc một đường ống
Với việc ước lượng vật chất hoá, kết quả của một phép toán được lưu lại như một quan hệ tạm thời (kết quả về mặt vật lý được vật chất hoá) Ví dụ, phép nối có thể được tính toán và toàn bộ kết quả được lưu lại như một quan
hệ tạm thời, sau đó quan hệ này sẽ được đọc như đầu vào của phép PROJECT, phép chiếu này sẽ đưa ra bảng kết quả truy vấn Mặt khác, với việc ước lượng đường ống, khi các bộ giá trị kết quả của một phép toán được đưa ra, thì chúng được chuyển tiếp tới phép toán tiếp theo trong truy vấn Ví
dụ, khi các bộ giá trị được chọn từ DEPARTMENT được đưa ra bởi phép SELECT, chúng sẽ được đặt trong một bộ đệm và những bộ giá trị này được
sử dụng cho phép toán JOIN Kết quả từ phép JOIN lại là nguồn cung cấp cho phép chiếu Ưu điểm của sử dụng đường ống là tiết kiệm được giá trong việc không phải ghi các kết quả trung gian lên đĩa và không phải đọc lại chúng cho phép toán tiếp theo
1.4 Sử dụng ước lượng chọn lọc và ước lượng chi phí trong tối
ưu truy vấn
Một bộ tối ưu truy vấn không nên chỉ phụ thuộc vào các luật dự đoán, nên ước lượng và so sánh giá của việc thực thi một truy vấn sử dụng các phương án thực thi khác nhau và chọn một phương án với ước lượng giá là thấp nhất Với cách tiếp cận này, để làm việc đòi hỏi phải có ước lượng giá chính xác, do đó các phương án khác nhau cần được xem xét, nhưng việc ước lượng giá cho nhiều chiến lược có thể tốn rất nhiều thời gian [4, 5, 7]
Trang 40Cách tiếp cận này là tối ưu truy vấn dựa trên giá, nó sử dụng các kỹ thuật tối ưu truyền thống tìm giải pháp cho một bài toán với giải pháp cực tiểu một hàm giá Các hàm giá được sử dụng trong tối ưu truy vấn là các ước lượng và hàm giá là tương đối, do đó việc tối ưu có thể chọn một chiến lược thực thi truy vấn mà không phải là tối ưu nhất
Giá của việc thực thi một truy vấn bao gồm các thành phần sau [6]:
1 Giá truy cập vào bộ lưu trữ thứ cấp: là giá tìm kiếm, đọc và ghi các khối dữ liệu tại bộ lưu trữ thứ cấp trên đĩa Giá của việc tìm kiếm các bản ghi trên một file phụ thuộc vào kiểu cấu trúc truy nhập trên file đó, như sắp xếp, băm, chỉ số sơ cấp và chỉ số thứ cấp Thêm vào đó, các nhân tố khác như khi các khối file được định vị kề nhau hoặc rải rác trên đĩa có ảnh hưởng đến giá truy nhập
2 Giá lưu trữ: là giá của việc lưu trữ bất kỳ file trung gian được sinh ra bởi một chiến lược thực thi truy vấn
3 Giá tính toán: là giá của việc thực hiện các phép toán trong bộ nhớ trên các vùng đệm khi thực thi truy vấn Như là các thao tác tìm kiếm và sắp xếp các bản ghi, trộn các bản ghi cho một phép nối và thực hiện tính toán trên giá trị các trường
4 Giá sử dụng bộ nhớ: là giá liên quan đến số bộ nhớ đệm cần thiết trong khi thực thi truy vấn
5 Giá giao tiếp: là giá của việc sử dụng đường ống truy vấn và kết quả của nó từ vị trí cơ sở dữ liệu này đến vị trí khác hoặc vị trí cuối cùng mà truy vấn được thực hiện
Với các cơ sở dữ liệu lớn, điểm nhấn mạnh chính là việc tối thiểu giá truy cập vào thiết bị lưu trữ thứ cấp Hàm giá đơn giản bỏ qua các nhân tố khác và so sánh các chiến lược thực thi truy vấn khác nhau trong các số hạng của các khối di chuyển giữa đĩa và bộ nhớ chính Với các cơ sở dữ liêu nhỏ hơn, hầu hết dữ liệu trong các file liên quan trong truy vấn có thể được lưu trữ