1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu và ứng dụng các thuật toán tối ưu hóa truy vấn cơ sở dữ liệu trong hệ thống hỗ trợ quản lý đào tạo từ xa tại viện đại học mở hà nội

69 103 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 69
Dung lượng 2,03 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tối thiểu dM cho trường hợp tốt nhất của thuật toán, đó là: 2*b + 2*b*log2b, trong đó: 2*b biểu diễn số khối truy cập đối với đoạn sắp xếp, vì mỗi khối của tệp được truy xuất hai lần: mộ

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO

VIỆN ĐẠI HỌC MỞ HÀ NỘI

-

BÁO CÁO TỔNG KẾT

ĐỀ TÀI KHOA HỌC VÀ CÔNG NGHỆ CẤP VIỆN

NGHIÊN CỨU VÀ ỨNG DỤNG CÁC THUẬT TOÁN TỐI ƯU HÓA TRUY VẤN CƠ SỞ DỮ LIỆU TRONG HỆ THỐNG HỖ TRỢ QUẢN LÝ ĐÀO TẠO TỪ XA TẠI VIỆN ĐẠI HỌC MỞ HÀ NỘI

Trang 2

DANH SÁCH THÀNH VIÊN THAM GIA NGHIÊN CỨU ĐỀ TÀI

Khoa Đào tạo từ xa

Khoa Công nghệ thông tin

Trang 3

MỤC LỤC

DANH MỤC HÌNH VẼ 5

PHẦN I – PHẦN MỞ ĐẦU 6

I 1 Tính cấp thiết của đề tài 6

I.2 Mục đích nghiên cứu 6

I.3 Đối tượng và phạm vi nghiên cứu 6

I.4 Phương pháp nghiên cứu 6

I.5 Các kết quả dự kiến đạt được 6

PHẦN II - NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU 7

Chương 1 - Tổng quan về tối ưu hóa truy vấn trong cơ sở dữ liệu 7 1.1 Giới thiệu về xử lý truy vấn 7

1.2 Các yêu cầu về phép biến đổi tối ưu hóa truy vấn 9

1.3 Các phương pháp xử lý truy vấn cơ bản 10

1.3.1 Các thuật toán cho việc sắp xếp ngoài 10

1.3.2 Các giải thuật đối với phép chọn (select) và phép nối (join) 13

1.3.2.1 Thực hiện phép chọn (Select) 13

1.3.2.2 Thực hiện phép nối (join) 18

1.3.3 Các giải thuật đối với phép chiếu (project) và các phép toán trên tập hợp 27

1.3.4 Sự thực hiện của các phép toán kết hợp và các phép nối ngoài 32

1.3.4.1 Sự thực hiện của các phép toán kết hợp 32

1.3.4.2 Sự thực hiện của phép nối ngoài 33

Trang 4

1.3.5 Sự kết hợp các phép toán bằng kỹ thuật đường ống 37

Chương 2 - Các thuật toán tối ưu hóa truy vấn 39

2.1 Tối ưu hóa truy vấn dùng thuật toán Heuristics 39

2.1.1 Các qui tắc chuyển đổi tổng quát của các phép toán đại số quan hệ 45

2.1.2 Các bước của một thuật toán tối ưu hoá đại số sử dụng heuristic 48

2.2 Tối ưu hóa truy vấn dựa theo ước lượng chi phí 49

2.2.1 Những ví dụ về các hàm chi phí đối với phép chọn (select) 51

2.2.2 Các hàm chi phí đối với nối (Join) 53

2.2.3 Các truy vấn đa quan hệ và thứ tự nối (Join) 55

Chương 3 - Ứng dụng tối ưu hóa truy vấn trên hệ thống TMAS 57 3.1 Tối ưu hóa trong hệ quản trị cơ sở dữ liệu MySQL Server 57

3.1.1 Nguyên tắc 1 - Ghi rõ tên cột trong câu lệnh SELECT 57

3.1.2 Nguyên tắc 2 - Ghi rõ tên cột trong câu lệnh INSERT 58

3.1.3 Nguyên tắc 3 - Chỉ dùng DISTINCT khi cần 58

3.1.4 Nguyên tắc 4 - Chỉ dùng UNION khi cần 59

3.1.5 Nguyên tắc 5 - Sử dụng EXPLAIN để phân tích truy vấn 59

3.1.6 Nguyên tắc 6 - Sử dụng INDEX trong MySQL 64

3.2 Chương trình ứng dụng thử nghiệm 65

PHẦN III - KẾT LUẬN VÀ KIẾN NGHỊ 68

III.1 Kết luận 68

III.2 Kiến nghị 68

TÀI LIỆU THAM KHẢO 69

Trang 5

DANH MỤC HÌNH VẼ

Hình 1.1 Các bước đặc trưng khi xử lí truy vấn mức cao 8

Hình 1.2 Tổng quan thuật toán sắp trộn đối với sắp xếp ngoài 12

Hình 1.3 Thực hiện phép T  R A=BS bằng cách sử dụng Sort-merge, trong đó R có n bộ và S có m bộ 20

Hình 1.4 Thực hiện phép T <danh sách thuộc tính> (R) bằng cách sử dụng Sort-merge, trong đó R có n bộ và S có m bộ 28

Hình 1.5 Thực hiện phép T  R∪S bằng cách sử dụng Sort-merge, trong đó R có n bộ và S có m bộ 29

Hình 1.6 Thực hiện phép TRSbằng cách sử dụng Sort-merge, trong đó R có n bộ và S có m bộ 30

Hình 1.7 Thực hiện phép T R - S bằng cách sử dụng Sort-merge, trong đó R có n bộ và S có m bộ 31

Hình 2.1 Các bước chuyển đổi một cây truy vấn trong suốt quá trình tối ưu hóa bằng cách sử dụng heuristic (a) Cây truy vấn ban đầu ứng với SQL (b) Chuyển các phép chọn xuống dưới cây truy vấn (c) Ưu tiên áp dụng các phép chọn có giới hạn hơn (d) Thay thế tích Đề Các và phép chọn bằng các phép nối (e)Chuyển các phép chiếu xuống dưới cây truy vấn 44

Hình 3.1 Giao diện chính của chương trình 66

Hình 3.2 So sánh thời gian thực hiện truy vấn tối ưu 66

Hình 3.3 Kết quả chạy demo câu truy vấn sử dụng thuật toán Heuristics 67

Hình 3.4 Kết quả chạy demo câu truy vấn sử dụng thuật toán Heuristics 67

Trang 6

PHẦN I – PHẦN MỞ ĐẦU

I 1 Tính cấp thiết của đề tài

Hiệu năng ứng dụng phụ thuộc vào rất nhiều yếu tố, trong đó có một yếu tố rất quan trọng đó là thời gian để máy chủ SQL xử lý câu lệnh T-SQL Đôi khi thiết kế cơ sở dữ liệu và các yêu cầu truy vấn phức tạp làm cản trở tốc độ thực thi của các câu lệnh T-SQL Các thuật toán xử lý và tối ưu hóa truy vấn là những thuật toán hữu ích trong quá trình xử lý cơ sở dữ liệu và nâng cao hiệu năng của ứng dụng trong thực tiễn Hiện nay, thực trạng các ứng dụng mà có nhiều yêu cầu truy vấn, kết nối đến máy chủ SQL thường gặp tình trạng tắc nghẽn, máy chủ bị quá tải dẫn đễn việc xử lý dữ liệu chậm có nhiều trường hợp còn bị sập máy chủ Đây là một khó khăn thường gặp phải khi xây dựng các ứng dụng, đặc biệt là những ứng dụng trực tuyến với số lượng truy cập lớn và những truy vấn phức tạp

I.2 Mục đích nghiên cứu

Nghiên cứu áp dụng các thuật toán tối ưu hóa truy vấn CSDL để hỗ trợ giải quyết vấn

đề nâng cao hiệu năng của ứng dụng Hệ thống hỗ trợ Quản lý đào tạo Từ Xa tại Viện Đại học Mở Hà Nội

I.3 Đối tượng và phạm vi nghiên cứu

Đối tượng nghiên cứu là các phương pháp truy vấn

Phạm vi nghiên cứu là kỹ thuật đồng bộ và tối ưu truy vấn trong cơ sở dữ liệu

I.4 Phương pháp nghiên cứu

Nghiên cứu lý thuyết về khai phá dữ liệu, tối ưu hóa truy vấn, ứng dụng các phương pháp vào thiết kế và xây dựng hệ thống hỗ trợ quản lý đào tạo Từ Xa tại Viện Đại học

Mở Hà Nội

I.5 Các kết quả dự kiến đạt được

- Trình bày phương pháp tối ưu hóa truy vấn

- Cài đặt thử nghiệm thuật toán tối ưu hóa truy vấn

Trang 7

PHẦN II - NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU

Chương 1 -Tổng quan về tối ưu hóa truy vấn trong cơ sở dữ liệu

1.1 Giới thiệu về xử lý truy vấn

Chương này trình bày các kỹ thuật sử dụng trong hệ quản trị cơ sở dữ liệu (Database Management System - DBMS) để xử lý truy vấn bậc cao.Một truy vấn biểu diễn trong ngôn ngữ truy vấn bậc cao, chẳng hạn như SQL, đầu tiên phải được kiểm tra, phân tích cú pháp, và xác nhận tính hợp lệ Việc kiểm tra là nhận dạngtruy vấn được viết bằng ngôn ngữ nàothông qua việc nhận dạng các thẻtruy vấn, chẳng hạn như các từ khóa SQL, tên thuộc tính, tên quan hệ trong phần chữ của câu truy vấn Trong khi đó, việc phân tích cú pháp làkiểm tracú phápcâu truy vấn xem có hợp lệ hay không, tức là xác định xem nócó được xây dựng theocác quy tắccú pháp(quy tắc ngữ pháp) củangôn ngữ truy vấn hay không Các truy vấn cũng phải được xác nhận tính hợp lệ, tức là kiểm tra tất cả các quan hệ và thuộc tính sử dụng trong truy vấn đã được khai báo hay chưa.Sau đó, truy vấn thường được biểu diễn dưới dạng cấu trúc dữ liệu cây, và được

gọi làcây truy vấn.Tuy nhiên, nó cũng có thể được biểu diễn dưới dạng cấu trúc dữ liệu đồ thị, và được gọi là đồ thị truy vấn.Tiếp theo, các hệ quản trị cơ sở dữ liệu phải

đặt ra một chiến lượcthực hiệnhoặckế hoạch truy vấnđể lấy cáckết quảcủa các truy vấntừ các tập tincơ 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 lựa cách xử lý truy vấn thích hợp được gọi là tối ưu hóa truy vấn

Hình 1.1 mô tả các bước khác nhau của việc xử lí truy vấn bậc cao.Tối ưu hóa truy vấn có nhiệm vụ đưa ra một chiến lược tốt, và sinh ra mã để thực hiện chiến lược đó.Cácbộ xử lýcơ sở dữ liệuthời gian chạycónhiệm vụ thực hiệnmãtruy vấnđể đưa ra kết quả truy vấn Khi kết quả chạy lỗi, thông báo lỗi sẽ được đưa ra

Trang 8

Báo cáo nàytập trungbiểu diễntối ưu hóatruy vấn trongngữ cảnh của mộthệ quản trị cơ

sở dữ liệu quan hệ (Relational Database Management System – RDBMS).Mộthệ quản trị cơ sở dữ liệu quan hệphảiđánh giámột cách hệ thốngcác chiến lượcthực hiện truy vấnthay thế vàchọn một chiến lượchợp lý hiệu quảhoặcgần tối ưu Mỗihệ quản trị cơ

sở dữ liệuthường cómộtsố thuật toántruy cậpcơ sở dữ liệuchungthực hiện các phép toánđại sốquan hệ nhưSELECT, hoặcJOIN, hoặc sự kết hợpcủacác phép toán này Chỉcác chiến lượcđượcthực hiệnbởi các thuật toántruy cậphệ quản trị cơ sở dữ liệu

Truy vấn trong ngôn ngữ bậc cao

Kiểm tra, phân tích cú pháp và xác nhận tính hợp lệ

Dạng gần với truy vấn (Cây truy vấn)

Tối ưu hóa truy vấn

Chiến lược thực hiện

Tạo mã truy vấn

Viết mã cho việc thực hiện truy vấn

Xử lý cơ sở dữ liệu hiện thời

Kết quả truy vấn

Hình 1.1 Các bước đặc trưng khi xử lí truy vấn mức cao

Trang 9

vàáp dụng chocáctruy vấn cụ thể, cũng nhưcácthiết kếcơ sở dữ liệu vật lý cụ thể thì mớicó thểđược xem là tối ưu hóatruy vấn

Chương này bắt đầu trình bày về cách chuyển các câu truy vấn SQL sang đại số quan

hệ và sau đó tối ưu hóa Tiếp theo, trình bày về các thuật toán để thực hiện phép toán đại số quan hệ

1.2 Các yêu cầu về phép biến đổi tối ưu hóa truy vấn

Trong thực tế, SQL là ngôn ngữ truy vấn được sử dụng trong hầu hết các hệ quản trị

cơ sở dữ liệu quan hệ Đầu tiên, một câu truy vấn được chuyển đổi sang một biểu thức đại số quan hệ mở rộng tương đương, biểu diễn dưới dạng cấu trúc cây truy vấn, sau

đó được tối ưu hóa Thông thường, các câu truy vấn SQL được phân tích thành các khối truy vấn, tạo thành cácđơn vịcơ bảncó thể chuyển đổi sang các phép toán đại số

và tối ưu hóa Một khối truy vấn bao gồm một biểu thức đơn WHERE, cũng như các mệnh đề GROUP BY và HAVING nếu chúng là một phần củakhối Vì vậy, các truy vấn lồng nhau được xác định như là các khối truy vấn riêng biệt SQL bao gồm tập hợp các phép toán chẳng hạn nhưMAX, MIN, SUM và COUNT, các phép toán này cũng bao gồm trong đại số mở rộng

Điểm_Thi (ID_ĐiểmThi, Mã Đăng kí môn, Mã DSThi, Lần thi, Điểm thi, Mã CBGV, Thời gian nhập, Người xác nhận, Thời gian xác nhận, Mã DM_TT_ĐiểmThi, Xử lý đặc biệt)

SELECT Mã Đăng kí môn, Mã DSThi

FROM Điểm_Thi

WHERE Điểm thi>= (SELECT MAX(Điểm thi)

FROM Điểm_Thi WHERE Mã DSThi = ‘105-28112015-1’);

Câu truy vấn này bao gồm một truy vấn con lồng và vì vậy sẽ được phân tích thành hai khối Khối bên trong là:

(SELECT MAX(Điểm thi)

Trang 10

WHERE Điểm thi>= C

Trong đó C biểu diễn kết quả trả về từ khối trong Khối trong có thể được chuyển sang biểu thức đại số quan hệ mở rộng

ℑMAXĐiểm thi(σMã DSThi = ‘105-28112015-1’(Điểm_Thi))

Trong đó ℑ là phép kết hợp hàm (AGGREGATE FUNCTION: SUM, AVERAGE, MAXIMUM, MINIMUM, COUNT)

Và block ngoài sang biểu thức

ЛMã Đăng kí môn, Mã DSThi(σĐiểm thi>=c(Điểm_Thi))

Tối ưu hóa câu truy vấn chọn một cách thực hiện đối với mỗi khối Chúng ta lưu ý rằng trong Ví dụ 1.1, chỉ khối trong cần được định giá để đưa ra Điểm thi cao nhất, sau đó, nó được dùng như hằng số C cho khối ngoài

1.3 Các phương pháp xử lý truy vấn cơ bản

1.3.1. Các thuật toán cho việc sắp xếp ngoài

Sắp xếp là một trong những thuật toán chính sử dụng trong xử lý truy vấn Chẳng hạn, bất cứ một câu truy vấn SQL nào mà có chứa mệnh đề ORDER BY, thì kết quả truy vấn phải được sắp xếp.Sắp xếp cũng là một phần then chốt trong các giải thuật sắp xếp trộn (Merge Sort) được sử dụng cho phép JOIN và các phép khác (chẳng hạn nhưUNION và INTERSECTION), và trong các giải thuật loại trừ giống nhau đối với phép PROJECT (khi một câu truy vấn SQL có tùy chọn DISTINCT trong mệnh đề SELECT) Chúng ta sẽ thảo luận một trong các giải thuật này trong phần này Lưu ý rằng, việc sắp xếp có thể không dùng nếu tồn tại một chỉ mục thích hợp tồn tại cho phép truy cập thứ tự đến các bản ghi

Trang 11

Sắp xếp ngoài đề cập tới các thuật toán sắp xếp phù hợp với các tập tin lớn các bản ghi được lưu trữ trong ổ đĩa mà không được lưu đầy đủ (hoàn toàn) trên bộ nhớ chính, chẳng hạn như phần lớn các tệp cơ sở dữ liệu.Giải thuật sắp xếp ngoài điển hình là sử dụng chiến lược sắp xếp trộn.Nhắc lại rằng, sắp xếp trộn là giải thuật bắt đầu bằng việc sắp xếp các file con, gọi là runs, của file chính và sau đó trộn các runs, tạo các file con đã sắp lớn hơn được trộn lần lượt Giải thuật sắp trộn, giống như các giải thuật

cơ sở dữ liệu khác, đòi hỏi bộ đệm trong bộ nhớ chính, thực tế việc sắp xếp và trộn của các runs được thực hiện tại đó.Thuật toán được trình bày trong Hình 1.2, bao gồm hai giai đoạn: một giai đoạn sắp xếp và một giai đoạn trộn.Không gian đệm trong bộ nhớ chính là một phần của bộ nhớ cache DBMS – là một vùng trong bộ nhớ chính máy tính được điều khiển bởi DBMS Không gian đệm được chia thành các vùng đệm riêng biệt, trong đó mỗi vùng đệm có cùng kích cỡ theo byte như kích thước của khối đĩa Do vậy, mỗi vùng đệm có thể chứa được nội dung chính xác một khối đĩa

Trong giai đoạn sắp, runs (phần chia, mảnh) của file có thể vừa với bộ đệm có sẵn được đọc vào bộ nhớ chính, sắp xếp bằng giải thuật sắp xếp bên trong và ghi lại trên đĩa như các file con tạm thời (hoặc runs) Kích thước của một run và số runs ban đầu (nR) được cho bởi số khối file (b) và vùng nhớ có sẵn (nB)

Trong đoạn trộn, các runs đã sắp được trộn với nhau bằng một hoặc nhiều lần thực hiện (pass) Bậc trộn dM là số các runs có thể được trộn trong mỗi lần thực hiện Khi

đó cần một khối đệm để chứa một khối từ mỗi runs đang được trộn, và một khối cần cho việc chứa một một khối của kết quả trộn Vì vậy, dM là giá trị nhỏ hơn trong hai giá trị (nB -1) và nR, và số lần thực hiện trộn là logdM(n R))

Trang 12

Hình 1.2 Tổng quan thuật toán sắp trộn đối với sắp xếp ngoài

Set i ←1;

j ← b; {kích thước của tập tin trong các khối}

k ← nB; {kích thước của vùng đệm trong các khối }

Trang 13

Ví dụ 1.2:

Trong giai đoạn sắp, nếu nB= 5 khối và kích thước của file b=1024 khối thì nR= [(b/nB)] hoặc 205 runs ban đầu kích thước 5 khối (trừ ra run cuối cùng có 4 khối) Vì vậy, sau đoạn sắp xếp, 205 runs đã sắp được sắp như là các file con tạm thời trên đĩa Trong giai đoạn trộn, dM=4 do đó 205 runs đã sắp ban đầu sẽ được trộn thành 52 tại cuối cùng của những lần đầu tiên, rồi nó được trộn thành 13, rồi 4, rồi 1 run, điều đó

có nghĩa là cần 4 lần

Tối thiểu dM cho trường hợp tốt nhất của thuật toán, đó là:

(2*b) + (2*(b*(log2b))), trong đó:

(2*b) biểu diễn số khối truy cập đối với đoạn sắp xếp, vì mỗi khối của tệp được truy xuất hai lần: một cho việc đọc vào bộ nhớ và một cho việc ghi các bản ghi này lên đĩa sau khi sắp xếp;

(2*(b*log2b))) biểu diễn số truy xuất khối trong giai đoạn trộn, giả sử trường hợp xấu nhất dM =2

Tổng quát, log được tính dựa trên dM và biểu thức đối với số khối truy cập trở thành

Sinh_Viên (Mã SV, Họ tên SV, Số CMTND, Ngày sinh, Hộ khẩu, Địa chỉ, Nơi sinh, Giới tính, Quê quán, Đoàn thể, Năm tốt nghiệp, Nơi tốt nghiệp, Nơi công tác, Điện thoại, Email, Năng khiếu, Mã dân tộc, Mã Tôn giáo, Mã bậc học);

Trang 14

Lớp_Môn (Mã lớp môn, Tên lớp môn, Ngày bắt đầu, Ngày kết thúc, Mã đơn vị học

vụ, Mã ca, Mã phòng, Mã cán bộ giảng viên, Người tạo, Ngày tạo, Ngày duyệt, Người duyệt, Mã trạng thái lớp môn, Mã môn học, Mã đơn vị);

• OP3: σMã SV = ‘15A10010001’(Đăng_Ký_Môn)

• OP4: σMã dân tộc = ‘Kinh’ANDNgày sinh >= ‘1/1/1985’ ANDGiới tính = ‘Nữ’(Sinh_Viên)

• OP5: σMã SV = ‘15A10010001’ANDMã Lớp Môn = 105-12015-1(Đăng_Ký_Môn)

năng chọn các bản ghi từ file Các giải thuật này cũng được biết như là duyệt file, bởi

vì chúng duyệt hết các bản ghi của file để tìm kiếm và lấy các bản ghi thỏa mãn điều kiện chọn Nếu giải thuật tìm kiếm có sử dụng chỉ mục thì tìm kiến theo chỉ mục được

gọi là index scan (phép duyệt theo chỉ mục) Các phương thức tìm sau đây (từ S1 đến

S6) là các ví dụ về một số thuật toán tìm kiếm mà có thể được sử dụng để thực hiện phép chọn:

S1 - Tìm kiếm tuyến tính (Linear search): Duyệt từng bản ghi trong file, và

kiểm tra giá trị thuộc tính của nó có thỏa mãn điều kiện chọn hay không

S2- Tìm kiếm nhị phân (Binary search): Nếu điều kiện chọn gồm một so sánh

bằng trên thuộc tính khóa trên file được sắp xếp, tìm kiếm nhị phân có thể hiệu quả hơn tìm kiếm tuyến tính Một ví dụ là OP1 khi Mã SV là thuộc tính sắp xếp đối với fileSinh_viên

S3- Sử dụng chỉ mục sơ cấp (hoặc hash key): Nếu điều kiện chọn bao gồm so

sánh bằng trên một thuộc tính khóa với một chỉ mục sơ cấp (hoặc hash key), chẳng hạn như Mã SV = ‘15A10010001’trong OP1, sử dụng chỉ mục sơ cấp để lấy bản ghi Lưu ý rằng điều kiện này truy tìm bản ghi đơn

Trang 15

S4- Sử dụng chỉ mục sơ cấp để lấy nhiều bản ghi: Nếu điều kiện so sánh là <,

>=, < hoặc <= trên trường khóa với chỉ mục sơ cấp Chẳng hạn như, Mã_TT_ĐKM > 2trong OP2, sử dụng chỉ mục để tìm các bản ghi thỏa mãn điều kiện bằng tương ứng (Mã_TT_ĐKM = 2), sau đó lấy tất cả các bản ghi tiếp theo trong file (đã sắp xếp) Đối với điều kiện Mã_TT_ĐKM < 2, lấy hết tất cả các bản ghi có trước

S5- Sử dụng chỉ mục bó cụm để lấy nhiều bản ghi: Nếu điều kiện chọn gồm

một so sánh bằng trên thuộc tính không khóa với một chỉ mục cụm Chẳng hạn như, Mã SV = ‘15A10010001’ trong OP3, sử dụng chỉ mục để lấy tất cả các bản ghi thỏa mãn điều kiện

S6- sử dụng chỉ mục thứ cấp (B +_

kiếm này có thể được sử dụng để truy tìm bản ghi đơn nếu trường chỉ mục là một khóa (có giá trị duy nhất) hoặc để lấy nhiều bản ghi nếu trường chỉ mục không là khóa Điều này có thể được dùng đối với các so sánh bao gồm >, >=,

<, <=

Trong Mục 2.2 của Chương 2, chúng ta sẽ thảo luận làm cách nào để trình bày công thức ước lượng chi phí truy cập của các phương pháp tìm kiếm này theo số các truy cập khối và thời gian truy cập Phương pháp S1 áp dụng cho bất kỳ tệp nào nhưng tất

cả các phương pháp khác phụ thuộc vào việc 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 hay không Phương pháp S4 và S6 có thể được dùng để truy lục các bản ghi trong một vùng nào đó, chẳng hạn như

‘1/1/2016’ <= Ngày bắt đầu <= ‘31/1/2016’ Các truy vấn bao gồm các điều kiện như vậy được gọi là truy vấn theo vùng (range query)

toán SELECT là một điều kiện liên kết (conjunctive condition) (tức là nó được xây

dựng từ một số điều kiện đơn giản được kết nối với nhau bằng toán tử logic AND) thì DBMS có thể sử dụng các phương pháp bổ sung sau đây để thực hiện phép toán

S7-Sự lựa chọn liên kết sử dụng chỉ mục riêng biệt: Nếu một thuộc tính trong

bất kỳ điều kiện đơn giản nào của điều kiện liên kết có một đường dẫn truy cập cho phép sử dụng một trong số các phương pháp từ S2 đến S6 thì sử dụng điều

Trang 16

kiện đó để truy cập các bản ghi và sau đó kiểm tra xem mỗi bản ghi đã truy cập

có thỏa mãn các điều kiện đơn giản còn lại trong điều kiện liên kết hay không

S8-Sự lựa chọn liên kết sử dụng chỉ mục phức hợp Nếu hai hoặc nhiều thuộc

tính trong các điều kiện bằng của điều kiện liên kết và một chỉ mục phức (hoặc cấu trúc băm) tồn tại trên các trường kết hợp (ví dụ: nếu một chỉ mục được tạo trên khóa phức (Mã lớp môn, Mã SV) của tệp Đăng_Ký_Môn như trong OP5) thì chúng ta có thể sử dụng chỉ mục một cách trực tiếp

S9- Sự lựa chọn liên kết bằng sự giao nhau của các con trỏ bản ghi: Nếu các

chỉ mục thứ cấp (hoặc các đường dẫn truy cập khác) có giá trị trên nhiều hơn một trong số các trường trong các điều kiện đơn giản của điều kiện liên kết, và nếu các chỉ mục bao gồm các con trỏ bản ghi (thường là con trỏ khối) thì mỗi chỉ mục có thể được dùng để truy cập tập các con trỏ bản ghi thỏa mãn điều kiện riêng biệt Sự giao nhau của các tập con trỏ bản ghi này chính là các con trỏ bản ghi thỏa mãn điều kiện liên kết, sau đó chúng được sử dụng để truy cập các bản ghi một cách trực tiếp Nếu chỉ một số các điều kiện có chỉ mục thứ cấp thì mỗi bản ghi đã truy cập được tiếp tục kiểm tra nhằm xác định xem nó

có thỏa mãn các điều kiện còn lại hay không

Bất cứ khi nào một điều kiện đơn chỉ định sự chọn lựa (như OP1, OP2 hoặc OP3) thì chúng ta có thể chỉ cần kiểm tra xem có hay không một đường dẫn truy cập tồn tại trên thuộc tính bao hàm trong điều kiện đó Nếu một đường dẫn truy cập tồn tại thì phương pháp tương ứng với đường dẫn truy cập được sử dụng; trái lại, phương pháp tìm kiếm tuyến tính có thể được sử dụng.Tối ưu hóa câu truy vấn đối với phép toán SELECT chủ yếu là cần cho các điều kiện chọn kết hợp bất cứ khi nào có nhiều hơn một thuộc tính trong điều kiện có đường dẫn truy cập Bộ tối ưu hóa sẽ chọn đường dẫn truy cập sao cho truy lục ít bản ghi nhất, theo cách hiệu quả nhất bằng cách ước lượng các chi phí khác nhau và chọn ra phương pháp có chi phí ước lượng thấp nhất

Độ chọn lọc của một điều kiện:Khi bộ tối ưu đang chọn giữa nhiều điều kiện đơn

giản trong một điều kiện chọn liên kết thì nó thường xem xét độ chọn lọc (selectivity)

của mỗi điều kiện Độ chọn lọc được định nghĩa là tỉ lệ giữa số bản ghi (các bộ) thỏa

điều kiện với tổng số bản ghi (các bộ) trong tệp (quan hệ) nên đó là một số giữa 0 và 1

Trang 17

(0 nghĩa là không có bản ghi nào thỏa mãn điều kiện và 1 nghĩa là tất cả bản ghi đều thỏa điều kiện Mặc dù các độ chọn lọc chính xác của tất cả điều kiện có thể không có giá trị nhưng ước lượng các độ chọn lọc thường được lưu giữ trong danh mục của DBMS và được sử dụng bởi bộ tối ưu hóa Ví dụ, đối với điều kiện bằng trên một thuộc tính khóa của quan hệ r(R), s=1/|r(R)|, trong đó |r(R)| là số bộ trong quan hệ r(R) Đối với điều kiện bằng trên một thuộc tính với i giá trị riêng biệt, s có thể được ước lượng bởi (|r(R)|/i)/|r(R)| hoặc 1/i, giả sử rằng các bản ghi được phân phối giữa các giá trị riêng biệt.Theo giả thiết này, |r(R)|/i bản ghi sẽ thỏa mãn một điều kiện bằng trên thuộc tính này Tổng quát, số bản ghi thỏa một điều kiện chọn với độ chọn lọc s được ước lượng là |r(R)|*s Ước lượng này càng nhỏ thì việc muốn dùng các điều kiện đó trước tiên để lấy các bản ghi càng cao

So với một điều kiện chọn liên kết thì điều kiện chọn không liên kết (trong đó các điều kiện đơn giản được kết nối với nhau bằng OR nhiều hơn bằng AND) khó hơn nhiều để

xử lý và tối ưu Chẳng hạn như

OP4’: σMã dân tộc = ‘Kinh’ORNgày sinh >= ‘1/1/1985’ ORGiới tính = ‘Nữ’(Sinh_Viên)

Với điều kiện như vậy, có thể thực hiện sự tối ưu hoá nhỏ bởi vì các bản ghi thỏa mãn điều kiện liên kết là hợp của các bản ghi thỏa mãn các điều kiện riêng biệt.Vì vậy, nếu một trong các điều kiện không có đường dẫn truy cập thì chúng ta buộc phải dùng phương pháp tìm kiếm tuyến tính Chỉ khi nào một đường dẫn truy cập tồn tại trên mọi điều kiện thì chúng ta có thể tối ưu việc lựa chọn bằng cách truy lục tất cả các bản ghi thỏa mãn mỗi điều kiện và sau đó áp dụng phép hợp để loại bỏ các bản ghi trùng lặp

Một DBMS sẽ có sẵn nhiều phương pháp như trình bày ở trên và thường có nhiều phương pháp bổ sung Bộ tối ưu hóa truy vấn phải chọn phương pháp thích hợp để thực hiện mỗi phép SELECT trong một câu truy vấn.Sự tối ưu hoá này sử dụng công thức ước lượng chi phí cho mỗi phương pháp truy cập và bộ tối ưu hoá chọn phương pháp truy cập có chi phí ước lượng thấp nhất

Trang 18

1.3.2.2 Thực hiện phép nối (join)

Phép toán JOIN là một trong những phép toán tiêu tốn thời gian nhất trong xử lý truy vấn Nhiều phép nối dùng trong các truy vấn là của các loại EQUIJOIN và NATURAL JOIN, do đó, ở đây chúng ta chỉ xét hai loại này Có nhiều cách để thực hiện một phép nối hai chiều (two-way join), đó là phép nối trên hai tệp.Các phép nối gồm nhiều hơn hai tệp được gọi là các phép nối đa chiều.Trong phần này, chúng ta chỉ trình bày các kỹ thuật thực hiện phép nối hai chiều, xét thuật toán đối với phép nối có dạng:

R A=B S, trong đó, A và B lần lượt là các thuộc tính tương thích miền (domain-compatible) của

R và S

Các phương pháp thực hiện phép nối:

J1 Nested–loop join(phépnối vòng lặp lồng nhau).Đối với mỗi bản ghi t trong

R (vòng lặp ngoài), truy lục mỗi bản ghi s từ S (vòng lặp trong) và kiểm tra xem hai bản ghi có thõa mãnđiều kiện nốit[A]=s[B] hay không?

J2- Single – loop join (phép nối vòng lặp đơn) (sử dụng một cấu trúc truy xuất

để truy lục các bản ghi phù hợp) Giả sử một chỉ mục (hoặc khóa băm) tồn tại đối với thuộc tính nối B của S, tại một thời điểm (vòng lặpđơn) truy lục một bản ghi t trong R và sau đó sử dụng cấu trúc truy cập để truy lục trực tiếp tất cả các bản ghi phù hợp s từ S thỏa mãn s[B] = t[A]

J3- Sort-merge join (phép nối sắp xếp trộn) Nếu các bản ghi của R và S được

sắp xếp vật lý theo giá trị của các thuộc tính nối A và B thì chúng ta có thể thực hiện phép nối bằng cách hiệu quả nhất có thể Cả hai tệp được duyệt đồng thời theo thứ tự của các thuộc tính nối, kết nối các bản ghi có cùng giá trị đối với thuộc tính A và B Nếu các tệp chưa được sắp xếp thì trước tiên chúng phải được sắp bằng cách sử dụng sắp xếp ngoài Trong phương pháp này, từng cặp khối của tệp được sao chép vào các bộ đệm theo thứ tự và các bản ghi của mỗi tệp được duyệt chỉ một lầnđể kết nối phù hợp với tệp khác Nếu cả A và B là các thuộc tính không khóa thì trong trường hợp đó phương pháp cần được sửa

Trang 19

đổi (mứcđộ sửa đổi không đáng kể) Thuật toán sort-merge join được mô tả như Hình 1.3 Chúng ta sử dụng R(i) để chỉ bản ghi thứ i trong R Một biến thể

của thuật toán sort-merge join có thể được sử dụng khi các chỉ mục thứ cấp tồn

tại trên cả hai thuộc tính nối Các chỉ mục này cung cấp khả năng truy cập (duyệt) các bản ghi theo thứ tự của các thuộc tính nối, nhưng về mặt vật lí bản thân các bản ghi được phân bố trên tất cả các khối tệp, vì vậy phương pháp này

có thể không hiệu quả lắm khi truy xuất bản ghi có thể cần phải truy xuất một khối đĩa khác nhau

J4-Hash – join (phép nối băm) Các bản ghi của tệp R và S cả hai được băm

đến cùng tệp băm bằng cách sử dụng hàm băm giống nhau trên các thuộc tính nối A của R và B của S như là các khóa băm Đầu tiên, băm các bản ghi của tệp cóít bản ghi hơn (giả sử là R) đến các bucket tệp băm; đây được gọi là giai đoạn phân chia do đó các bản ghi của R được phân chia vào các bucket băm Trong giai đoạn thứ hai gọi là giai đoạn tìm kiếm, một thực hiệnđơn qua tệp khác (S) sau đó băm mỗi bản ghi của nó để dò tìm bucket thích hợp và bản ghi

đó được nối với tất cả các bản ghi phù hợp từ R trong bucket đó Sự mô tả đơn giản phép nối băm này giả sử rằng tệp nhỏ hơn trong số hai tệp vừa khớp hoàn toàn trong các bucket bộ nhớ (memory buckets) sau giai đoạn đầu tiên Chúng

ta sẽ tìm hiểu các biến thể củaphép nối băm mà không cần giả thiết này

Trong thực tế, các kỹ thuật J1 đến J4 được thực hiện bằng cách truy cập toàn bộ các khối trên đĩa của một tệp hơn là truy cập các bản ghi riêng biệt Phụ thuộc vào không gian bộ đệm khả dụng trong bộ nhớ, số khối đọc vào từ tệp có thể được điều chỉnh

Ảnh hưởng của không gian bộ đệm khả dụng và hệ số chọn nối khi thực hiện

phép nối (Effects of Available Buffer Space and Join Selection Factor on Join

Performance).Không gian bộ đệm khả dụng có ảnh hưởng quan trọng đối với các thuật toán nối khác nhau Chúng ta sẽ minh họa thông qua Ví dụ 1.4

Trang 20

Sắp xếp các bộ trong R theo thuộc tính A; (*giả sử R có n bộ các bản ghi*) Sắp xếp các bộ trong S theo thuộc tính B; (*giả sử S có m bộcác bản ghi*) Set i1, j1;

While (i ≤ n) and (j ≤ m) do

{

If R(i)[A]>S(j)[B]then set j  j +1 Else

if R(i)[A]<S(j)[B] thenset i  i +1 else

{ (*R(i)[A]=S(j)[B], do đó chúng ta đưa ra một bộ tương ứng*)

set i  k, j l }

}

Hình 1.3 Thực hiện phép T  R A=B Sbằng cách sử dụng Sort-merge, trong đó R có n bộ

và S có m bộ

Trang 21

Ví dụ 1.4: Xét lược đồcơ sở dữ liệu quan hệ

Môn_CTĐT (Mã Môn CTĐT, Mã Loại Môn Học, Mã Môn Học, Mã CTĐT, Bắt buộc/ Tự chọn);

Môn_Tiên_Quyết (Mã Tiên Quyết, Mã Môn CTĐT, Môn Thay thế/ Tiên Quyết, Thay thế/ Tiên Quyết);

Và các phép nối sau

OP6: Môn_Tiên_Quyết Môn_Tiên_Quyết.Mã Môn CTĐT =Môn_CTĐT.Mã Môn CTĐT Môn_CTĐT OP7:Môn_CTĐT Môn_CTĐT.MãMônCTĐT=Môn_Tiên_Quyết.Môn Thay thế/Tiên Quyết Môn_Tiên_Quyết Trước tiên chúng ta hãy xét phương pháp nested-loop (J1) Xem lại phép toán OP6 ở trên, giả sử rằng số bộ đệm khả dụng trong bộ nhớ chính cho việc thực hiện nối là

nB=7 blocks (các bộ đệm) Để minh họa, giả sử rằng tệp Môn_CTĐT gồm có rCTĐT=

50 bản ghi lưu trữ trong bCTĐT= 10 khối đĩa và tệp Môn_Tiên_Quyết gồm có

rTiên_Quyết= 300 bản ghi lưu trữ trong bTiên_Quyết= 100 khối đĩa Nó thuận tiện để đọc nhiều khối từ tệp vào bộ nhớ tại một thời điểm từ tệp và các bản ghi của tệp được sử dụng cho vòng lặp ngoài (tức là, nB - 2 khối) Sau đó thuật toán có thể đọc một khối tại một thời điểm đối với tệp dùng làm vòng lặp trong và sử dụng các bản ghi của nó để

dò tìm (tìm kiếm) các khối vòng lặp ngoài trong bộ nhớ để kết nối các bản ghi phù hợp Điều này làm giảm tổng số truy cập khối Cần thêm một khối bộ đệm để chứa các bản ghi kết quả sau khi chúng được nối và nội dung của khối bộ đệm này được bổ sung vào tệp kết quả (tệp trên đĩa chứa kết quả phép nối) bất cứ khi nào nó (khối bộ đệm) bị đầy Sau đó khối bộ đệm này được sử dụng lại để lưu giữ thêm các bản ghi kết quả

Trong phép nối vòng lặp lồng nhau (nested-loop join), có sự khác biệt khi chọn tệp nào dùng làm vòng lặp ngoài và tệp nào dùng làm vòng lặp trong.Nếu Môn_Tiên_Quyết được dùng cho vòng lặp ngoài thì mỗi khối của Môn_Tiên_Quyết được đọc một lần và toàn bộ tệp Môn_CTĐT (mỗi khối) được đọc một lần vào mỗi thời điểm chúng ta đọc (nB-2) khối tệp từ Môn_Tiên_Quyết vào bộ nhớ đệm Chúng ta

có như sau:

Tổng số khối truy cập đối với tệp ngoài làbTiên_Quyết

Trang 22

Số lần (nB-2) khối của tệp ngoài được nạp là bTiên_Quyết /(nB-2)

Tổng số khối đã truy cập đối với tệp trong làbCTĐT* bTiên_Quyết /(nB-2)

Vì vậy chúng ta có tổng số truy cập khối như sau:

Mặt khác, nếu chúng ta sử dụng các bản ghi Môn_CTĐT trong vòng lặp ngoài thì tổng số truy cập khối là:

bCTĐT+ (  bCTĐT/(nB - 2) * bTiên_Quyết) = 10 + ( 10/5 * 100) = 210 truy cập khối Thuật toán nối sử dụng một bộ đệm để lưu giữ các bản ghi đã nối kết của tệp kết quả.Mỗi lần bộ đệm bị đầy thì nó được ghi vào đĩa và được sử dụng lại

Nếu tệp kết quả của phép nối có bRES khối đĩa thì mỗi khối được ghi một lần, vì vậy thêm bRES truy cập khối vào công thức có trước nhằm ước lượng tổng chi phí của phép nối.Từ Ví dụ 1.4 cho thấy nên sử dụng tệp có số khối ít hơn làm tệp vòng lặp ngoài trong phép nối vòng lặp lồng nhau

Một hệ số khác có ảnh hưởng đến việc thực hiện phép nối, đặc biệt là phương pháp vòng lặp đơn (single-loop) J2, là tỉ lệ phần trăm các bản ghi trong tệp sẽ được nối với

các bản ghi trong tệp khác Chúng ta gọi đây là hệ số chọn nối (the join selection

factor) của tệp với chú ý đến điều kiện nối bằng (equijoin) với tệp khác.Hệ số này phụ thuộc vào điều kiện nối bằng riêng biệt giữa hai tệp.Để minh họa điều này, xét toán OP7 nối mỗi bản ghi Môn_CTĐT với bản ghi Môn_Tiên_Quyết Ở đây, mỗi bản ghi Môn_CTĐT (có 50 bản ghi như vậy trong Ví dụ 1.4) muốn được nối với một bản ghi Môn_Tiên_Quyết đơn, nhưng nhiều bản ghi Môn_CTĐT sẽ không được nối

Giả sử rằng các chỉ mục thứ cấp tồn tại trên cả hai thuộc tính Môn Thay thế/Tiên Quyết của Môn_Tiên_Quyết và Mã Môn CTĐT của Môn_CTĐT, với số mức chỉ mục lần lượt là xMôn Thay thế/ Tiên Quyết=4 và xMã Môn CTĐT=2 Chúng ta có hai tùy chọn đối với việc thực hiện phương pháp J2.Đầu tiên truy lục mỗi bản ghi Môn_Tiên_Quyết và sau

đó sử dụng chỉ mục trên Mã Môn CTĐT của Môn_CTĐT để tìm bản ghi Môn_CTĐT phù hợp.Trong trường hợp này, không tìm thấy bản ghi phù hợp đối với các

Trang 23

Môn_CTĐT không phải là một Môn_Tiên_Quyết nào Số truy cập khối đối với trường hợp này là khoảng chừng:

Tùy chọn thứ hai truy lục mỗi bản ghi Môn_CTĐT và sau đó sử dụng chỉ mục trên Môn Thay thế/Tiên Quyết của Môn_Tiên_Quyết để tìm ra bản ghi Môn_Tiên_Quyết phù hợp Trong trường hợp này, mọi bản ghi Môn_Tiên_Quyết sẽ có một bản ghi Môn_CTĐT phù hợp Số truy cập khối đối với trường hợp này là vào khoảng:

bCTĐT + (rCTĐT* (xMôn Tiên Quyết+1)) = 10 + (50*5) = 260 truy cập khối

Tùy chọn thứ 2 hiệu quả hơn vì hệ số chọn nối của Môn_CTĐT với sự chú ý đến điều kiện nối Môn_CTĐT Mã Môn CTĐT = Môn_Tiên_Quyết Môn Thay thế/ Tiên Quyếtlà 1, ngược lại hệ số chọn nối của Môn_Tiên_Quyết với sự chú ý đến cùng điều kiện nối là (50/300) hoặc 0.1667.Với phương pháp J2, hoặc tệp nhỏ hơn hoặc tệp có

sự phù hợp đối với mọi bản ghi (tức là, tệp có hệ số chọn nối cao) sẽ được sử dụng trong vòng lặp nối (ngoài).Cũng có thể tạo một chỉ mục riêng đối với việc thực hiện phép nối nếu nó chưa tồn tại

Phép nối sắp xếp-trộn (Sort-merge join) J3 khá hiệu quả nếu cả hai tệp được sắp xếp bởi thuộc tính nối của chúng Chỉ một lần thực hiệnđơn qua mỗi tệp Do đó số khối truy cập bằng với tổng số khối trong cả hai tệp Đối với phương pháp này, cả hai OP6

và OP7 có thể cần bCTĐT + bTiên_Quyết= 10 + 100 = 110 truy cập khối Tuy nhiên, cả hai tệp phải được sắp thứ tự theo các thuộc tính nối; nếu một hoặc cả hai tệp không sắp thứ tự thì chúng có thể được sắp xếp riêng đối với việc thực hiện phép nối Nếu chúng

ta ước lượng chi phí sắp xếp một tệp ngoài bằng (b*log2b) truy cập khối và nếu cả hai tệp cần được sắp xếp thì tổng chi phí một phép nối sắp xếp-trộn có thể được ước lượng bằng (bCTĐT + bTiên_Quyết + bTiên_Quyết *log2 bTiên_Quyết + bCTĐT *log2 bCTĐT)

Phép nối băm phân chiavà phépnối băm hỗn hợp (Partition Hash Join and Hybrid

Hash Join).Phương pháp nối băm J4 cũng khá hiệu quả Trong trường hợp này chỉ mộtlần thực hiện đơn quamỗi tệp dù các tệpđó có được sắp xếp hay không Nếu bảng băm của tệp nhỏ hơn (trong hai tệp) có thể được lưu giữ hoàn toàn trong bộ nhớ chính sau khi băm (phân chia) trên thuộc tính nối của nó thì việc thực hiện là dễ dàng Tuy

Trang 24

nhiên, nếu các phần của tệp băm phải được lưu trữ trên đĩa thì phương pháp trở nên phức tạp hơn và một số phương án nhằm cải tiến hiệu quả đã được đề xuất Chúng ta

sẽ thảo luận hai kỹ thuật được xem là khá hiệu quả: nối băm phân chia (Partition Hash Join) và nối băm hỗn hợp (Hybrid Hash Join)

Trong thuật toán nối băm phân chia, trước tiên mỗi tệp được phân chia thành M phần bằng cách sử dụng một hàm băm phân chia trên các thuộc tính nối.Sau đó, mỗi cặp phần (đã phân chia ở trên) được nối với nhau.Chẳng hạn, giả sử chúng ta đang nối hai quan hệ R và S trên các thuộc tính nối R.A và S.B:

R A=B S Trong giai đoạn phân chia, R được phân thành M phần R1, R2,…RM và S thành M phần S1, S2,…SM Tính chất (property) của mỗi cặp phân chia tương ứng Ri, Si là các bản ghi trong Ri chỉ cần được nối với các bản ghi trong Si và ngược lại Tính chất này được bảo đảm bằng việc sử dụng cùng hàm băm để phân chia cả hai tệp trên các thuộc tính nối của chúng.Số bộ nhớđệm tối thiểu cần cho giai đoạn phân chia là M+1.Mỗi tệp R và S được phân chia tách biệt nhau.Đối với mỗi phần phân chia, một bộ nhớ đệm đơn (có kích thước là một khối đĩa) được cấp phát để lưu trữ các bản ghi băm đến phân chia này.Bất cứ khi nào bộ nhớđệm cho một phân chia bị đầy thì dữ liệu chứa trong nóđược bổ sung vào một tệp con trên đĩa (disk subfile) lưu trữ phần phân chia này Giai đoạn phân chia có hai lần lặp Sau lần lặp thứ nhất, tệp R được phân chia thành các tệp con R1, R2, …, RM, trong đó các bản ghi băm đến cùng bộ nhớ đệm sẽ thuộc cùng phần phân chia Sau lần lặp thứ hai, tệp S được phân chia tương tự

Trong giai đoạn thứ 2, gọi là giai đoạn dò tìm vànối , cần M lần lặp Trong suốt lần lặp thứ i, hai phần phân chia Ri và Si được nối với nhau Số bộđệm tối thiểu cần cho lần lặp thứ i bằng số khối của phần phân chia nhỏ hơn trong hai phần phân chia Ri và

Si (giả sử là Ri) cộng với hai bộ đệm thêm vào Nếu chúng ta dùng một phép nối vòng lặp lồng nhau trong suốt lần lặp thứ i thì các bản ghi của phần phân chia nhỏ hơn (Ri) được sao chép vào các bộ đệm của bộ nhớ; sau đó tất cả các khối từ phần phân chia khác (Si) được đọc (một khối tại một thời điểm) và mỗi bản ghi được dùng để dò tìm (tìm kiếm) phần phân chia Ri nhằm kết nối (matching) các bản ghi phù hợp Bất kỳ các bản ghi nào phù hợpđều được nối và ghi vào tệp kết quả Để cải tiến hiệu quả việc

Trang 25

dò tìm trong bộ nhớ, thường sử dụng một bảng băm trong bộ nhớ để lưu trữ các bản ghi trong phần phân chia Ri bằng cách sử dụng một hàm băm khác với hàm băm phân chia

Chúng ta có thể xấp xỉ chi phí của phép nối băm phân chia này bằng 3*(bR+bS) + bRES

do mỗi bản ghi được đọc một lần và ghi lại vào đĩa một lần trong suốt giai đoạn phân chia Trong giai đoạn nối (dò tìm), mỗi bản ghi được đọc để thực hiện phép nối.Khó khăn chính của thuật toán này là bảo đảm rằng hàm băm phân chia là không thay đổi, nghĩa là các kích cỡ phần phân chia gần bằng nhau.Nếu hàm phân chia bị lệch (thay đổi) thì một số phần phân chia có thể quá lớnđể vừa với không gian bộ nhớ khả dụngđối với giai đoạn nối thứ hai

Lưu ý rằng, nếu không gian bộ nhớđệm nB > (bR+2), trong đó bR là số khối của tệp nhỏ hơn trong hai tệp đang được nối (giả sử là R) thì không có lí do gì để thực hiện phân chia vì trong trường hợp này, phép nối có thể được thực hiện hoàn toàn trong bộ

nhớ bằng cách sử dụng một số biến thể của phép nốivòng lặp lồng nhau (nested-loop)

dựa trên băm và dò tìm

Sinh_Viên (Mã SV, Họ tên SV, Số CMTND, Ngày sinh, Hộ khẩu, Địa chỉ, Nơi sinh, Giới tính, Quê quán, Đoàn thể, Năm tốt nghiệp, Nơi tốt nghiệp, Nơi công tác, Điện thoại, Email, Năng khiếu, Mã dân tộc, Mã Tôn giáo, Mã bậc học);

DM_Bậc_Học (Mã bậc học, Tên bậc học);

và phép nối sau

OP8: Sinh_Viên Sinh_Viên.Mã bậc học =DM_Bậc_Học.Mã bậc học DM_Bậc_Học

Trong ví dụ này, tệp nhỏ hơn là tệp DM_Bậc_Học Do đó, nếu số bộ đệm trong bộ nhớ khả dụng có nB > (bDM_Bậc_Học+2) thì toàn bộ tệpDM_Bậc_Học có thể được đọc vào bộ nhớ chính và được tổ chức thành bảng băm trên thuộc tính nối Sau đó, mỗi khốiSinh_Viên được đọc vào một bộ đệm và mỗi bản ghi Sinh_Viên trong bộ đệm được băm trên thuộc tính nối của nó và được sử dụng để dò tìm bucket trong bộ nhớ tương ứng trong bảng băm DM_Bậc_Học Nếu một bản ghi phù hợp được tìm thấy thì các bản ghi được nối với nhau và các bản ghi kết quả được ghi vào bộ đệm kết quả và

Trang 26

cuối cùng là ghi vào tệp kết quả trên đĩa Vì vậy chi phí tínhtheo số truy cập khối là

Thuật toán nối băm hỗn hợp (hybrid hash-join algorithm) là một biến thể của phép

nối băm phân chia, trong đó giai đoạn nối đối với một trong số các phân chia được bao gồm trong giai đoạn phân chia.Chẳng hạn, giả sử rằng kích thước của bộ đệm là một khốiđĩa; có nB bộ đệm khả dụng như vậy và hàm băm được sử dụng là

h(K) = K mod M sao cho M phần phân chia được tạo, trong đó M < nB

Để minh họa, giả sử chúng ta thực hiện phép nối

OP8: Sinh_Viên Sinh_Viên.Mã bậc học =DM_Bậc_Học.Mã bậc học DM_Bậc_Học

Trong lần thực hiệnđầu tiên của giai đoạn phân chia, khi thuật toán nối băm hỗn hợp đang phân chia tệp nhỏ hơn trong hai tệp (tức là tệp DM_Bậc_Học trong OP8), thuật toán chia không gian bộ đệm thành M phần sao cho tất cả các khối của phần phân chia đầu tiên của DM_Bậc_Học hoàn toàn nằm trong bộ nhớ chính Với mỗi phần phân chia khác, chỉ một bộ đệm đơn trong bộ nhớ (có kích thước là một khốiđĩa) được cấp phát; phần còn lại của sự phân chia được ghi vào đĩa như phép nối băm phân chia thông thường Do đó, vào cuối của lần thực hiệnđầu tiên của giai đoạn phân chia, phần phân chia đầu tiên của DM_Bậc_Học nằm hoàn toàn trong bộ nhớ chính, trái lại mỗi phần phân chia khác củaDM_Bậc_Học nằm trong một tệp con của đĩa

Đối với lần thực hiện thứ hai của giai đoạn phân chia, các bản ghi của tệp thứ hai đang được nối (tệp lớn hơn, Sinh_Viên trong OP8) bị phân chia.Nếu một bản ghi băm tới phần phân chia đầu tiên thì nó được nối với bảng ghi phù hợp trong DM_Bậc_Học và các bản ghi đã nối được ghi vào bộ đệm kết quả (và cuối cùng ghi vào đĩa).Nếu một bản ghi DM_Bậc_Học băm đến một phần phân chia khác với phầnđầu tiên thì nó được phân chia bình thường.Vì vậy, vào cuối lần thực hiện thứ hai của giai đoạn phân chia, tất cả các bản ghi băm đến phần đầu tiên đã được nối.Bây giờ có M-1 cặp phân chia trên đĩa Vì vậy, trong suốt giai đoạn nối hoặc dò tìm lần hai, cần M-1 lần lặp thay vì M lần Mục đích là nối nhiều bản ghi trong suốt giai đoạn phân chia nhằm

Trang 27

tiếtkiệm chi phí lưu trữ các bản ghi đó vào lạiđĩa vàđọc chúng lần thứ hai trong giai đoạn nối

1.3.3. Các giải thuật đối với phép chiếu (project) và các phép toán trên tập hợp

Phép chiếu π<attribute_list> (R)thực hiện dễ dàng nếu <attribute list> bao gồm khóa của quan hệ R, bởi vì kết quả phép toán sẽ có cùng số bộ như R, nhưng với chỉ các giá trị đối với các thuộc tính trong <attribute list> trong mỗi bộ Nếu <attribute list> không bao gồm cả khóa của R, các bộ giống nhau (sao lại) sẽ bị loại.Điều này luôn được thực hiện bằng cách sắp xếp các phép toán và loại các bộ bản sao, các bộ này sẽ xuất hiện liên tiếp sau khi sắp.Mô tả thuật toán được cho ở Hình 1.4 Băm cũng có thể được sử dụng để loại bỏ giống nhau: mỗi bản ghi được băm và được chèn vào một bucket của file băm trong bộ nhớ, nó đã được kiểm tra lại tại bucket Nếu nó là bản sao thì nó không được chèn vào.Thật là cần thiết khi nhắc lại điều đó ở đây trong câu truy vấn SQL, mặc định nó không loại bỏ các bản sao từ kết quả truy vấn; chỉ khi có từ khóa DISTINCT thì loại bỏ các bản sao trong kết quả truy vấn

Tập các phép toán – hợp, giao, trừ, và tích Đề-các – đôi khi chi phí quá cao để thực hiện Trong thực tế, phép tích Đề-các RxS là chi phí quá cao bởi vì kết quả của nó bao gồm bản ghi đối với việc kết nối của các bản ghi của R và S Thêm vào đó các thuộc tính 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 và S có m bản ghi và k thuộc tính, kết quả quan hệ sẽ có m*n bản ghi và j+k thuộc tính Vì vậy, thật quan trọng để tránh phép tích Đề-các, để thay vào đó các phép toán tương đương trong quá trình tối ưu hóa truy vấn

Tập ba phép toán hợp, giao và trừ chỉ áp dụng để hợp-tương thích các quan hệ mà có cùng số thuộc tính và có cùng miền thuộc tính Cách thông thường để thực hiện các phép toán này là sử dụng các biến của kỹ thuật sort-merge: hai quan hệ được sắp xếp trên các cùng các thuộc tính và sau khi sắp xếp, một single duyệt qua mỗi quan hệ là

đủ để đưa ra kết quả Chẳng hạn như, chúng ta có thể thực hiện phép hợp, R ∪ S, bằng cách cũng một lúc duyệt và trộn hai file đã sắp xếp, và chỉ khi bộ giống nhau tồn tại trong hai quan hệ, chỉ một được giữ lại trong kết quả trộn Đối với phép giao,

S

R ∩ , chúng ta chỉ giữ lại trong kết quả trộn các bộ có mặt trong cả hai quan hệ Hình 1.5, Hình 1.6, và Hình 1.7 mô tả sự thực hiện của ba phép toán hợp, giao và trừ bằng cách sắp xếp và trộn

Trang 28

Tạo một bộ T[<danh sách thuộc tính>] trong T’ cho mỗi bột trong R;

(*T’ chứa kết quả phépchiếu trước khi loại bỏ các bản ghi trùng lặp*)

If<danh sách các thuộc tính> bao gồm mộtkhóa của RThen TT’

Else

{sắp xếp các bộ trong T’;

Set i  1, j 2;

While i ≤ n do

{ đưa bộ T’[i] vàoT;

While T’[i]=T’[j] and j ≤ n do jj+1; (*loại bỏ các bản ghi trùng lặp*)

ij; ji+1 }

}

(* T chứa kết quả phép chiếu sau khi loại bỏ các bản ghi trùng lặp*)

Hình 1.4 Thực hiện phép T <danh sách thuộc tính> (R) bằng cách sử dụng Sort-merge,

trong đó R có n bộ và S có m bộ

Trang 29

Sắp xếp các bộ trong R và S bằngcách sử dụng cùng các thuộc tính sắp xếp duy nhất;

Else

if R(i)<S(j) then {

đưa R(i) vào T;

set ii+ 1 }

Else set j j+1 (* R(i) = S(j), vì vậy chúng ta bỏ qua một trong các bộ trùng lặp*)

}

If (i ≤ n) then thêm các bộ từR(i) đến R(n) vào T;

If (j ≤ m) then thêm các bộ từS(j) đến R(m) vào T;

Hình 1.5 Thực hiện phép T  RS bằng cách sử dụng Sort-merge, trong đó R có n bộ

và S có m bộ

Trang 30

Hình 1.6 Thực hiện phép TRSbằng cách sử dụng Sort-merge, trong đó R có n bộ

và S có m bộ

Trang 31

Sắp xếp các bộ trong R và S bằng cách sử dụng cùng các thộc tính sắp xếp duy nhất Set i1, j1;

If (i ≤ n) then thêm các bộ từR(i) đến R(n) vào T;

Hình 1.7 Thực hiện phép T R - S bằng cách sử dụng Sort-merge, trong đó R có n bộ

S, tìm và kiểm tra khi bản ghi giống nhau từ R được tìm thấy trong bucket, và khi thêm bản ghi vào file kết quả Thực hiện R-S, đầu tiên băm các bản ghi của R đến các bucket file băm Trong khi băm (dò tìm) mỗi bản ghi của S, khi một bản ghi giống nhau được tìm thấy trong bucket thì loại bỏ bản ghi đó khỏi bucket

Trang 32

1.3.4. Sự thực hiện của các phép toán kết hợp và các phép nối ngoài

1.3.4.1 Sự thực hiện của các phép toán kết hợp

Các phép kết hợp (MIN, MAX, COUNT, AVERAGE, SUM), khi đãáp dụng cho toàn

bộ bảng, có thể được tính bằng cách duyệt qua bảng hoặc sử dụng một bảng chỉ mục thích hợp nếu sẵn có

SV_ĐiểmTN (Mã SV Điểm TN, Mã SV, Mã môn TN, Điểm)

SELECT MAX(Điểm)

FROM SV_ĐiểmTN

Nếu một chỉ mục (tăng dần) trên Điểm tồn tại đối với quan hệ SV_ĐiểmTN, thì cách tối ưu là có thể quyết định sử dụng chỉ mục để tìm kiếm giá trị lớn nhất bằng cách theo sau con trỏ bên phải nhất trong mỗi nút chỉ mục từ nút gốc đến nút lá bên phải nhất Nút đó sẽ bao gồm giá trị Điểm lớn nhất là mục ghi vào sau cùng của nó.Trong hầu hết các trường hợp, điều này sẽ hiệu quả hơn việc duyệt qua toàn bộ bảng của quan hệ SV_ĐiểmTN Phép MIN có thể được điều khiển một cách tương tự, ngoại trừ việc sử dụng con trỏ bên trái nhất được theo sau từ nút gốc đến nút lá bên trái nhất Nút đó sẽ bao gồm giá trị Điểm nhỏ nhất chính là mục ghi vào đầu tiên

Chỉ mục có thể cũng được sử dụng đối với các phép COUNT, AVERAGE, SUM, nhưng chỉ nếu đó là một chỉ mục dày đặc (dense index), nghĩa là có một chỉ mục đối với mọi bản ghi trong file chính Trong trường hợp này, việc tính toán kết hợp sẽ được

áp dụng đến các giá trị trong file chỉ mục.Đối với chỉ mục không dày đặc (nondense index), số các bản ghi thực tế kết hợp với mỗi chỉ mục vào phải được sử dụng đối với một quá trình tính toán đúng (ngoại từ COUNT DISTINCT, ở đây số các giá trị phân biệt có thể được đếm từ chỉ mục của chính nó)

Khi một mệnh đề GROUP BY được sử dụng trong một truy vấn, phép kết hợp phải được áp dụng đến mỗi nhóm một cách tách rời nhau.Vì vậy, đầu tiên bảng phải được phân chia thành các tập con gồm một số bộ, ở đây mỗi phần (nhóm) có giá trị giống nhau đối với các thuộc tính nhóm.Trong trường hợp này, quá trình tính toán là phức tạp hơn

Trang 33

Ví dụ 1.7:Xét câu truy vấn SQL trên lược đồ quan hệ Điểm_Thi sau đây:

Điểm_Thi (ID_ĐiểmThi, Mã Đăng kí môn, Mã DSThi, Lần thi, Điểm thi, Mã CBGV, Thời gian nhập, Người xác nhận, Thời gian xác nhận, Mã DM_TT_ĐiểmThi, Xử lý đặc biệt)

SELECT Mã DSThi, AVG(Điểm thi)

FROM Điểm_Thi

GROUP BY Mã DSThi;

Kỹ thuật thông thường đối với các truy vấn như thế này là, đầu tiên chúng ta sắp xếp hoặc là băm trên các thuộc tính để chia file thành các nhóm thích hợp Sau đó thuật toán tính hàm kết hợp đối với các bộ trong mỗi nhóm, mỗi nhóm có giá trị các thuộc tính nhóm giống nhau.Trong Ví dụ 1.7, tập các bộ đối với mỗi Mã DSThi sẽ được nhóm trong cùng một phần và giá trị trung bình của Điểm thiđược tính đối với mỗi nhóm

1.3.4.2 Sự thực hiện của phép nối ngoài

Các phép nối ngoài

Phần này chúng ta mô tả sự mở rộng của phép nối (join), chúng là cần thiết để chỉ rõ các kiểu của các truy vấn.Các phép nối đã mô tả trước đây chỉ nối các bộ thỏa mãn điều kiện nối.Chẳng hạn như, phép nối tự nhiên R*S, chỉ bao gồm các bộ của R hợp với các bộ trong S và ngược lại.Vì vậy, các bộ không hợp (không có quan hệ) với các

bộ khác được loại bỏ trong kết quả phép nối, ngay cả các bộ với các giá trị NULL ở các thuộc tính nối cũng bị loại bỏ.Việc này có thể làm mất thông tin, nếu kết quả của phép nối được sử dụng để tạo ra một báo cáo dựa vào tất cả các thông tin trong các quan hệ thành phần

Một tập các phép được gọi là các phép nối ngoài, có thể được sử dụng khi chúng ta muốn giữ lại tất cả các bộ trong R hoặc tất cả các bộ trong S, hoặc tất cả các bộ trong

cả hai quan hệ trong kết quả của phép nối, bất chấp chúng hợp hay không hợp với các

bộ trong quan hệ khác Điều này thỏa mãn sự cần thiết của các truy vấn trong đó các

bộ từ hai bảng được kết hợp bằng cách hợp các dòng tương ứng, nhưng không bị mất

Trang 34

bất cứ bộ nào do thiếu các giá trị kết hợp Phép nối thông thường gọi là phép nối trong (inner joins)

Ngày đăng: 07/02/2021, 19:59

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1]. Nguyễn Thị Vân Anh, Tìm hiểu một số vấn đề về tối ưu hóa truy vấn, luận văn thạc sĩ Sách, tạp chí
Tiêu đề: Tìm hi"ể"u m"ộ"t s"ố" v"ấ"n "đề" v"ề" t"ố"i "ư"u hóa truy v"ấ"n
[2]. Đoàn Văn Ban, Lê Mạnh Thạnh và Hoàng Bảo Hùng, "Sự tương đương trong biểu diễn ngôn ngữ truy vấn OQL và đại số đối tượng", tạp chí tin học và điều khiển học, 20(3), (2004), 257-269 Sách, tạp chí
Tiêu đề: Sự tương đương trong biểu diễn ngôn ngữ truy vấn OQL và đại số đối tượng
Tác giả: Đoàn Văn Ban, Lê Mạnh Thạnh và Hoàng Bảo Hùng, "Sự tương đương trong biểu diễn ngôn ngữ truy vấn OQL và đại số đối tượng", tạp chí tin học và điều khiển học, 20(3)
Năm: 2004
[3]. Nguyễn Văn Dũng , T ố i ư u hóa truy v ấ n trên c ơ s ở d ữ li ệ u phân tán, luận văn thạc sĩ, Đại học Đà Nẵng Sách, tạp chí
Tiêu đề: T"ố"i "ư"u hóa truy v"ấ"n trên c"ơ" s"ở" d"ữ" li"ệ"u phân tán
[4].Đinh Thị Lan Phương, Tối ưu hóa truy vấn cơ sở dữ liệu quan hệ và cơ sở dữ liệu phân tán bằng phương pháp Heuristic, luận văn thạc sĩ, Đại học Công nghệ.Tiếng Anh Sách, tạp chí
Tiêu đề: T"ố"i "ư"u hóa truy v"ấ"n c"ơ" s"ở" d"ữ" li"ệ"u quan h"ệ" và c"ơ" s"ở" d"ữ" li"ệ"u phân tán b"ằ"ng ph"ươ"ng pháp Heuristic", luận văn thạc sĩ, Đại học Công nghệ. "Ti"ế
[1]. Bierman G.M. and Trigoni A,Towards A Formal Type System For ODMG OQL, Technical Report 497, University of Cambridge, Computer Laboratory, 2000 Sách, tạp chí
Tiêu đề: Towards A Formal Type System For ODMG OQL
[2]. Cattel R.G.G., Barry D.K,The Object Database Standard: ODMG 3.0, Morgan Kaufmann Publishers, 2000 Sách, tạp chí
Tiêu đề: The Object Database Standard: ODMG 3.0

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w