Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/CSDL Cơ sở dữ liệu CPU Central Processing Unit Bộ xử lý trung tâm OOP Object Oriented Programming Lập trì
Trang 1Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
THÔNG
NGUYỄN THỊ THU NGA
TIỀN TỐI ƯU CÁC CÂU SQL TỪ
CHƯƠNG TRÌNH NGUỒN
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY
TÍNH
THÁI NGUYÊN - 2014
Trang 2Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
THÔNG
NGUYỀN THỊ THU NGA
TIỀN TỐI ƯU CÁC CÂU SQL TỪ
CHƯƠNG TRÌNH NGUÔN
Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số : 60 48 01
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY
TÍNH
Giáo viên hướng dẫn: PGS.TS LÊ HUY THẬP
Trang 3Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
LỜI CAM ĐOAN
Tôi cam đoan đây là công trình nghiên cứu của riêng tôi
Các số liệu, kết quả nêu trong luận văn là trung thực và chưa từng được
ai công bố trong bất kỳ công trình nào khác
Qua đây em xin chân thành cảm ơn toàn thể các thầy cô trong khoa đào tạo sau đại học trường Đại học Công nghệ Thông tin và Truyền thông và đặc biệt là Thầy PGS.TS Lê Huy Thập, đã tạo điều kiện thuận lợi và hướng dẫn
em để hoàn thành luận văn này
Trang 4Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
LỜI CAM ĐOAN i
MỤC LỤC iv
DANH MỤC CÁC KÝ HIỆU vi
DANH MỤC CÁC CHỮ VIẾT TẮT vi
DANH MỤC BẢNG BIỂU viii
DANH MỤC HÌNH ẢNH ix
LỜI MỞ ĐẦU 1
CHƯƠNG 1: TỔNG QUAN VỀ NGÔN NGỮ SQL 3
1.1 Nghiên cứu ngôn ngữ SQL và một số dạng câu vấn tin SQL cơ bản 3
1.1.1 Giới thiệu ngôn ngữ SQL 3
1.1.2 Câu vấn tin SQL (Structured Query Language) 4
1.1.2.1 Thao tác với bảng 4
1.1.2.2 Khối lệnh Select 5
1.1.2.3 Tìm kiếm theo câu hỏi đơn giản 6
1.1.2.4 Các hàm thư viện 8
1.1.2.5 Tìm nhờ mệnh đề GROUP BY 9
1.1.2.6 Tìm kiếm và câu hỏi phức tạp 10
1.2 Nghiên cứu thuật toán Ingres và System tập trung 12
1.2.1 Thuật toán Ingres 12
1.2.2 Thuật toán System 20
1.3 Kết luận chương 25
CHƯƠNG 2: TIỀN TỐI ƯU CÁC CÂU SQL TỪ CHƯƠNG TRÌNH NGUỒN 26
2.1 Phương pháp phân rã SQL 26
2.1.1 Phương pháp phân rã SQL 26
2.1.2 Những ưu và nhược điểm của phương pháp phân rã SQL 32
2.1.3 Ứng dụng của phương pháp phân rã SQL: 33
Trang 5Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
2.2.1 Phương pháp thay thế SQL 34
2.2.2 Những ưu và nhược điểm của của phương pháp thay thế SQL 36
2.2.3 Ứng dụng của phương pháp thay thế SQL 37
2.3 Thuật toán xử lý tiền tối ưu câu SQL 37
2.4 Kết luận chương 42
CHƯƠNG 3 CHƯƠNG TRÌNH THỬ NGHIỆM 43
3.1 Mô tả bài toán 43
3.2 Thử nghiệm tiền tối ưu câu lệnh SQL 48
3.2.1 Xây dựng chương trình thử nghiệm 48
3.2.2 Thực hiện thử nghiệm 49
KẾT LUẬN 56
HƯỚNG PHÁT TRIỂN 56
TÀI LIỆU THAM KHẢO 57
Trang 6Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
Phép giao Phép hợp
Trang 7Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
CSDL Cơ sở dữ liệu
CPU Central Processing Unit (Bộ xử lý trung tâm)
OOP Object Oriented Programming (Lập trình hướng đối tượng)
QEP Query Executtion Plan (Chiến lược thực thi vấn tin)
SQL Structured Query Language (Ngôn ngữ truy vấn có cấu trúc)
OVQP One Variable Query processor (thể xử lý truy vấn một biến) ORQ Đơn quan hệ
MRQ Đa quan hệ
Trang 8Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
Bảng 1.1 Bảng nhân viên 15
Bảng 1.2.Bảng phân nhiệm 15
Bảng 1.3 Bảng dự án 15
Bảng 1.4 Bảng Trả lương 16
Bảng 2.1 Số liệu của quan hệ DanhHieu 29
Bảng 2.2 Số liệu quan hệ ThamGiaCM 29
Bảng 2.3 Số liệu quan hệ KhenThuong 30
Bảng 2.2.1 Kết quả danh sách người nhận huân chương 36
Bảng 2.2.2 Số liệu của quan hệ DanhHieu 39
Bảng 2.2.3 Số liệu quan hệ ThamGiaCM 39
Bảng 2.2.4 Số liệu quan hệ KhenThưởng 40
Bảng 2.2.5 Kết quả sau khi thực hiện thuật toán tối ưu 42
Bảng 3.1: Bảng sinh viên 44
Bảng 3.2: Bảng lớp 44
Bảng 3.3: Bảng môn học 45
Bảng 3.4: Bảng điểm 45
Bảng 3.5: Bảng điểm rèn luyện 45
Bảng 3.6: Bảng đối tượng 46
Bảng 3.7: Bảng gia đình 46
Bảng 3.8: Bảng học kỳ 46
Bảng 3.9: Bảng quan hệ 47
Bảng 3.10: Bảng thành viên gia đình 47
Trang 9Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
Hình 1.1 Đồ thị kết nối của câu truy vấn 23
Hình 1.2 Các thứ tự kết nối lựa chọn 24
Hình 3.1: Giao diện chính chương trình 48
Hình 3.2: Giao diện phần chèn dữ liệu tự động 49
Hình 3.3: Thực hiện truy vấn lấy danh sách điểm sinh viên 50
Hình 3.4 Thực hiện truy vấn lấy danh sách điểm sinh viên sau khi tối ưu SQL 52
Hình 3.5 Thực hiện truy vấn lấy thông tin sinh viên 53
Hình 3.6 Thực hiện truy vấn lấy thông tin sinh viên sau khi tối ưu SQL 55
Trang 10Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
LỜI MỞ ĐẦU
Trong tình hình hiện nay, các tổ chức, doanh nghiệp có nhiều chi nhánh
và đặt ở nhiều nơi với khối lượng dữ liệu lớn và đa người dùng, thường sử dụng cơ sở dữ liệu Do đó các phần mềm máy tính hỗ trợ nghiệp vụ của các tổ chức, doanh nghiệp cũng phải được tổ chức và phân tán một cách hợp lý Tuy nhiên, tốc độ xử lý của các phần mềm quản lý có dữ liệu lớn và nằm phân tán
sẽ trở nên vô cùng chậm, không đáp ứng được các yêu cầu của người dùng Điều này đòi hỏi các nhà phát triển phần mềm không những phải không ngừng xây dựng được những phần mềm lớn đa người dùng mà còn phải nghiên cứu và đưa ra các giải pháp tối ưu hóa câu lệnh, nhằm từng bước nâng cao tốc độ xử lý
và giảm giá thành của phần mềm
Qua tìm hiểu và nghiên cứu một số quy trình xây dựng phần mềm thì quá trình tối ưu hóa câu lệnh của các hệ chương trình rất có ý nghĩa vì kinh phí đầu tư của các tổ chức, doanh nghiệp cho các thiết bị phần cứng bước đầu còn rất hạn chế Cho nên giải pháp tối ưu hóa đến từng câu lệnh càng trở nên quan trọng hơn Điều này luôn có ý nghĩa lớn ngay cả khi các thiết bị phần cứng đáp ứng được yêu cầu
Nếu câu vấn tin SQL (Structured Query Language) đã được tối ưu trước khi thực hiện truy vấn sẽ nâng cao hiệu quả của chương trình và tiết
kiệm chi phí Cũng chính vì vậy, học viên quyết định chọn đề tài “Tiền tối ưu
các câu SQL từ chương trình nguồn” Trong phạm vi luận văn của mình,
học viên tìm hiểu câu lệnh truy vấn SQL, nghiên cứu phương pháp tối ưu câu SQL để nâng cao hiệu quả của chương trình Trong quá trình nghiên cứu học viên đã đề xuất phương pháp phân rã và thay thế câu lệnh SQL
Câu truy vấn đã được tối ưu sẽ nâng cao hiệu quả nếu nó thỏa mãn một số tiêu chuẩn cho trước nào đó Một số phương pháp phân tích và tối
ưu hóa các câu truy vấn dạng SQL đã được một số tác giả trong và ngoài
Trang 11Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
nước nghiên cứu Một số thuật toán cũng đã được công bố Tuy nhiên tất
cả đều dựa trên giả thuyết các câu vấn tin dạng SQL được lấy trực tiếp từ một chương trình nguồn hay người lập trình viết khi lập trình và tối ưu hóa một cách thủ công Một vấn đề đặt ra là một chương trình nguồn dạng tuần
tự mà trong đó có nhiều lệnh SQL có thể thỏa mãn điều kiện song song hóa
và chỉ được song song hóa và tối ưu hóa bởi phương pháp song song tự động Điều đó gây nhiều bất cập trong ứng dụng Việc tìm kiếm trong chương trình nguồn các lệnh SQL để hỗ trợ tối ưu hóa vấn tin là một vấn đề thời sự và cần thiết Trong khuôn khổ của luận văn các vấn đề sẽ lần lượt trình bày trong các chương
Chương 1: Sẽ trình bày các kiến thức cơ bản về một số phần mềm
tìm kiếm, tổng quan ngôn ngữ SQL, một số dạng câu vấn tin SQL, quá trình tối
Trang 12Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
CHƯƠNG 1: TỔNG QUAN VỀ NGÔN NGỮ SQL
1.1 Nghiên cứu ngôn ngữ SQL và một số dạng câu vấn tin SQL cơ bản
1.1.1 Giới thiệu ngôn ngữ SQL
Ngôn ngữ SQL (Structured Query Language) là ngôn ngữ truy vấn
mang tính cấu trúc, được sử dụng trong hầu hết các hệ quản trị cơ sở dữ liệu
để truy vấn và sửa đổi cơ sở dữ liệu Ngôn ngữ SQL hỗ trợ các truy vấn dựa trên các phép toán đại số quan hệ, đồng thời cũng chứa các lệnh sửa đổi cơ sở
dữ liệu và mô tả lược đồ cơ sở dữ liệu
SQL trước kia được gọi là SEQUEL, là một ngôn ngữ phi thủ tục được IBM phát triển ở San Jose, mục đích để sử dụng rộng rãi trong hệ thống cơ sở
dữ liệu thử nghiệm là System R Ngày nay, nó được sử dụng trong rất nhiều
hệ thống CSDL thương mại, và trong một số trường hợp, toàn bộ hệ thống cơ
sở dữ liệu được thương mại hoá với tên SQL
Tương tự các ngôn ngữ bậc cao khác, SQL được xây dựng dựa trên các chữ cái, các chữ số, các ký tự (ký hiệu phép toán, và các ký tự đặc biệt)
và một tập các từ khóa Ngôn ngữ SQL có thể sử dụng theo hai kiểu: kiểu trực tiếp và lập trình SQL trực tiếp cho phép thực hiện một truy vấn và nhận được kết quả ngay tức khắc SQL lập trình cho phép sử dụng SQL trong một chương trình viết bằng ngôn ngữ lập trình bậc cao khác (như C#, Java, ),
hoặc viết các chương trình con
Ngôn ngữ SQL được chia thành ba nhóm:
Ngôn ngữ định nghĩa dữ liệu dùng để mô tả cấu trúc của cơ sở
dữ liệu (các bảng, các khung nhìn, các thuộc tính, các chỉ mục, )
Ngôn ngữ thao tác dữ liệu cho phép thực hiện các thao tác trên cơ
sở dữ liệu như: cập nhật cơ sở dữ liệu và truy vấn, lấy ra các thông tin từ cơ
sở dữ liệu
Trang 13Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
Ngôn ngữ kiểm soát dữ liệu bao gồm các lệnh dùng để quản lý các
thao tác, các quyền truy cập dữ liệu, kết nối với server
1.1.2 Câu vấn tin SQL (Structured Query Language)
Đây là một loại ngôn ngữ con dữ liệu quan hệ được xác nhận là rất mạnh Phép toán cơ bản trong SQL là phép ánh xạ, được mô tả về cú pháp như là khối SELECT - FROM - WHERE
Mệnh đề SELECT nghĩa là chọn các thuộc tính ra, hay còn gọi là thuộc tính kết quả, nếu không chỉ ra thuộc tính thì dùng dấu * có nghĩa là tất cả các thuộc tính của quan hệ đang được chỉ ra sau mệnh đề FROM Mệnh đề FROM để chỉ ra quan hệ cần cho việc xử lý Sau mệnh đề WHERE là một biểu thức điều kiện lọc dữ liệu (hay còn gọi là biểu thức logic)
Chú ý: Từ đây về sau chúng ta đồng nhất; quan hệ với bảng, thuộc tính
với cột (columns) hay trường (field), bộ (tupe) với bản ghi (record) hay hàng (Rows)
( S# Integer Not null,
Sname VarChar(8) Not Null,
Status Integer Not Null,
City VarChar (30) Not Null)
Create Table P
( P# Integer Not null,
Trang 14Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
Pname VarChar(10) Not Null,
Weight Integer Not Null,
Color VarChar ( 10) Not Null
)
Create Table SP
( S# Integer Not null,
P# Integer Not null,
Insert Into S(S#, Sname, Status, City) Values (1011, „Việt Tiên‟, 40,
„TP Hà Nội‟) Nêu vị trí các cột là cố định thì viết:
Insert Into S Values (1011, „Việt Tiến‟, 40, „TP Hà Nội‟)
Nếu quên vị trí các cột là cố định thì viết tên cột và các giá trị theo vị trí tương ứng Chẳng hạn:
Insert Into S (Status, s#, City, Sname ) Values (40, 1011, „TP Hà Nội‟,
„Việt Tiến‟, 40)
Chú ý: Đây là lệnh thêm dữ liệu nhưng cũng được dùng để nhập dữ
liệu
1.1.2.2 Khối lệnh Select
Cú pháp như một khối select - from - where
select: Xác định nội dung của các cột cần đưa ra kết quả
Trang 15Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
from: Xác định các bảng cần lấy thông tin ra
where: Lọc các bản ghi thoả yêu cầu để đƣa ra kết quả
Ngoài ra, để mở rộng khả năng của ngôn ngữ, khối select - from - where còn đƣợc bổ sung thêm các mệnh đề groupe by, having, order by Các hàm mẫu và một số phần mềm còn thêm cả mệnh đề contpute, for browse
Dạng tổng quát của khối select đuợc biểu diễn nhƣ sau:
SELECT [* | DISTINCT] danh-sách-chiếu
FROM danh_sách_tên_bảng | tên_các_View
Trong đó mệnh đề where dƣợc biểu diễn dạng:
WHERE [NOT] BiểuThức PhépSoSánh BiểuThức
WHERE [NOT] tên_cột [ NOT] LIKE xâu_ký_tự
WHERE [NOT] biểu_thức [NOT] BETWEEN biểu_thức AND
biểu_thức
WHERE [NOT] BiểuThức [NOT] IN ({danhSách | CâuHỏiCon})
WHERE EXISTS (CâuHỏiCon)
WHERE [NOT] BiểuThức PhépSoSánh { ANY | ALL (CâuHỏiCon)} WHERE [NOT] TênCột phépKếtNối TênCột
WHERE [NOT] biểu_thức_logic
WHERE [NOT] biểu_thức { AND | OR } [NOT] biểu_thức
1.1.2.3 Tìm kiếm theo câu hỏi đơn giản
Không điều kiện và câu hỏi chỉ liên quan tới 1 bảng
Trang 16Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
Trong mệnh đề select có danh sách chiếu Danh sách này xác định tên các cột cần có trong bảng kết quả Nếu xuất hiện là chọn hết các cột của bảng
Cho biết danh sách các nhà cung cấp
Cho biết các mặt hàng khác nhau đã đƣợc cung cấp
SELECT DISTINCT PName FROM SP
Tìm kiếm với điều kiện đơn giản
WHERE SNAME LIKE 'HOA%'
Trong đó ký hiệu ' % ' là thay thế cho một xâu con, dấu phân cách để thay thế cho một ký tự
A%B: xâu ký tự bất kỳ bắt đầu bằng chữ A và kết thúc bảng chữ B %A
Trang 17Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
: xâu ký tự bất kỳ có ký tự kết thúc là A
A_B : xâu gồm ba ký tự có ký tự thứ hai là bất kỳ
A_: xâu gồm hai ký tự có ký đầu là A
Xử lý ngày tháng
Ngoài các phép tính thông thường SQL còn có thể xử lý dữ liệu dạng ngày tháng
Ví dụ: Tìm những mã mặt hàng bán trước ngày 04-04-11 là 10 ngày SELECT P#
WHERE PRICE BETWEEN 1000 AND 2000
Tìm mã số các nhà cung cấp dã cung cấp ít nhất một trong các mặt hàng có mã P1, P2, P3
mà không cần quan tâm tới bất kỳ cột nào
Cho biết số lần mặt hàng P2 đã được cung cấp
SELECT COUNT ( * )
FROM SP
Trang 18Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
WHERE P# = „P2‟
Tìm hiệu số mặt hàng P1 bán một lần nhiều nhất và một lần ít nhất của hãng S1
SELECT MAX(QTY ) - MIN(QTY)
FROMSP
WHERE S# = 'Sl' AND P# = 'P1‟
Cho biết danh sách mã số mặt hàng đã được cung cấp
SELECT COUNT ( DISTINCT p# )
Sau mệnh đề này bảng SP được ấy ra sau đó phân thành nhóm theo mã
số S#, có nghĩa là các hộ có cùng giá trị S# được sắp xếp liên tiếp nhau, hết nhóm này đến nhóm khác
Tìm kiếm sử dụng mệnh đề HAVING
HAVING thường được sử dụng cùng group by Sau HAVING là biểu thức điều kiện Biểu thức điều kiện này không tác động vào toàn bảng được chỉ ra sau from mà chỉ tác động lần lượt từng nhóm các bản ghi đã chỉ ra tại
mệnh đề group by
Ví dụ: Tìm mã số những nhà cung cấp đã cung cấp ít nhất hơn hai mặt hàng
Trang 19Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
Mệnh đề order By nếu đứng sau group by thì miền tác động của sắp xếp
là trong từng nhóm của cột đƣợc chỉ ra trong group by Nếu cột sắp xếp có ở mệnh đề select thì trong mệnh đề order by có thể chỉ cần chỉ ra số thứ tự của cột đó trong danh sách chiếu là đủ
1.1.2.6 Tìm kiếm và câu hỏi phức tạp
Tìm kiếm với nhiều bảng qua việc sử dụng ánh xạ lồng nhau hoặc qua phép kết nối
Tìm những nhà cung cấp đã cung cấp ít nhất một mặt hàng nào đó
Trang 20Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
SELECT PNAME
FROM P
WHERE P# = ANY (SELECT P# FROM SP WHERE S# = 'S1 ‟)
Tìm tên những hãng cung cấp ít nhất một mặt hàng màu đỏ
Trang 21Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
WHERE S# <> ALL (SELECT S# FROM SP)
1.2 Nghiên cứu thuật toán Ingres và System tập trung
1.2.1 Thuật toán Ingres
Ý tưởng thuật toán: Thuật toán bao gồm hai giai đoạn phân rã và tối
Trang 22Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
ưu hoá Đầu tiên, phân rã câu truy vấn dạng phép toán quan hệ thành các
phần nhỏ hơn Câu truy vấn trước tiên được phân rã thành một chuỗi các truy vấn có một quan hệ chung duy nhất (chính xác là một biến bộ duy nhất)
Sau đó mỗi câu truy vấn đơn quan hệ được xử lí bởi một “thể xử lý truy
vấn một biến” (one-variable query processor-OVQP), OVQP tối ưu hoá việc
truy xuất đến một quan hệ bằng cách chọn, dựa trên vị từ phương pháp truy xuất hữu hiệu nhất đến quan hệ đó (như dùng chỉ mục hoặc quét tuần tự) Thí
dụ nếu vị từ có dạng <A=value>, một chỉ mục đã có trên thuộc tính A sẽ được dùng Tuy nhiên, nếu vị từ có dạng <A value>, một chỉ mục trên A không có tác dụng gì, và quét tuần tự sẽ được dùng
Thuật toán trước tiên sẽ thực hiện các phép toán đơn ngôi (đơn quan hệ) và cố gắng giảm thiểu kích thước của các kết quả trung gian khi xếp thứ
tự các phép toán hai ngôi (đa quan hệ)
Chúng ta kí hiệu qi-1 qi để biểu thị câu truy vấn q được phân rã thành hai câu truy vấn con qi-1và qi, trong đó qi-1 được thực hiện trước và kết quả
sẽ được qi sử dụng Cho trước câu truy vấn q có n quan hệ, OVQP sẽ phân rã
q thành n câu truy vấn con q1 q2 qn phân rã này sử dụng hai kỹ thuật
cơ bản: tách (detachment) và thay thế (substitution) Tách là kỹ thuật được
OVQP sử dụng để tách câu truy vấn q thành các truy vấn q‟ q” dựa trên một quan hệ chung là kết quả của q‟ Nếu câu truy vấn q được biểu diễn bằng SQL có dạng:
SELECT R1.A1, R2.A2, R3.A3, ., Rn.An
Trang 23Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
vấn như thế có thể phân rã thành hai câu truy vấn con, q‟ theo sau là q” qua phép tách quan hệ chung R1:
q‟:
SELECT R1.A1 INTO R‟1 FROM R1
WHERE P1(R1.A1) Trong đó R‟1 là một quan hệ tạm thời chứa các thông tin cần thiết để thực hiện tiếp tục câu vấn tin:
q”: SELECT R2 A2, ., RnAn
FROM R‟1, R2, , Rn
WHERE P1(R1.A1, R2.A2, ., Rn.An)
Bước này có tác dụng giảm kích thước của quan hệ trên đó câu truy vấn q” được định nghĩa Hơn nữa, quan hệ R‟1 mới được tạo ra có thể lưu vào cấu trúc đặc biệt nhằm tăng tốc độ cho các câu truy vấn con theo sau Chẳng hạn lưu R‟1 trong một tập tin băm trên thuộc tính nối của q” làm cho việc xử
lý nối hiệu quả hơn, phép tách sẽ rút ra các phép toán chọn, thường là những phép có tính chọn lọc cao Vì thế phép tách thực hiện một cách có hệ thống mỗi khi có thể được
Ví dụ minh họa:
Trên CSDL “CONG_TY”, là một CSDL dùng để quản lý công việc của một công ty phần mềm, bao gồm các quan hệ sau đây:
Trang 24Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
Lê Trần Dũng Mai Thị Hoa Phan Ái Khanh Trịnh Lê Thanh
Phân tích HT Lập trình viên Phân tích HT Phân tích HT Lập trình viên
Kỹ sƣ điện Phân tích HT Bảng 1.1 Bảng nhân viên
Quản lý Phân tích Phân tích
Kỹ thuật Lập trình Quản lý Quản lý
Kỹ thuật Quản lý
Trang 25Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
TLUONG
Kỹ sƣ điện Phân tích HT Lập trình viên Thiết kế DL
Để minh hoạ kỹ thuật tách chúng ta có thể áp dụng nó cho câu truy vấn
sau:“Cho biết tên của các nhân viên đang làm việc trong dự án có tên CSDL”
trên cơ sở dữ liệu đã nói ở trên, câu truy vấn này có thể đƣợc diễn tả bằng SQL nhƣ sau:
q1: SELECT NHANVIEN HO_TEN
FROM NHANVIEN, PHANNHIEM, DUAN
WHERE NHANVIEN.MANV = PHANNHIEM.MANV
AND PHANNHIEM.MADA = DUAN.MADA AND TENDA = “CSDL”
Sau khi tách các phép chọn, câu truy vấn q1 đƣợc thay bởi q11 theo sau là q‟, trong đó TGIAN1 là quan hệ trung gian
q11: SELECT DUAN.MADA INTO TGIAN1
PHANNHIEM.MANV AND PHANNHIEM.MADA =TGIAN1.MADA
Trang 26Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
Các bước tách tiếp theo cho q‟ có thể tạo ra:
q12: SELECT PHANNHIEM.MANV INTO TGIAN2
FROM PHANNHIEM, TGIAN1 WHERE PHANNHIEM.MADA =TGIAN1.MADA
q13: SELECT NHANVIEN HO_TEN
FROM NHANVIEN, TGIAN2 WHERE NHANVIEN.MANV = TGIAN2.MANV
Chú ý có thể có những câu truy vấn con khác nữa
Truy vấn q1 đã được rút gọn thành chuỗi truy vấn q11 q12 q13 Truy vấn q11 là loại đơn quan hệ và có thể cho chạy bởi OVQP Tuy nhiên các truy vấn q12 và q13 không phải loại đơn quan hệ và cũng không thể rút gọn hơn nữa bằng phép tách.Các câu truy vấn đa quan hệ không thể tách tiếp
được nữa (chẳng hạn q12 và q13 trong thí dụ trên) được gọi là bất khả giản
(irreducible) Các truy vấn bất khả giản được biến đổi thành câu truy vấn đơn
quan hệ nhờ phép thế bộ (tuple substitution) Cho câu truy vấn n-quan hệ q,
các bộ của một biến được thay bằng các giá trị của chúng, tạo ra được một tập các truy vấn (n-1) biến Phép thế bộ được tiến hành như sau:
Trước tiên chọn một quan hệ trong q để thay thế Gọi R1 là quan hệ đó Thế thì với mỗi bộ t1i trong R1, các thuộc tính được tham chiếu trong q được thay bằng các giá trị thật sự trong t1i, tạo ra một câu truy vấn q‟ có (n-1) quan hệ Vì vậy trong số câu truy vấn q‟ được sinh ra bởi phép thế bộ là card(R1) Phép thế bộ có thể tóm tắt như sau:
q(R1, R2, , Rn) được thay bằng {q‟(t1i, R2, R3, , Rn), t1i R1}
Vì thế đối với mỗi bộ thu được, câu truy vấn con được xử lý đệ quy
Trang 27Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
bằng phép thế nếu nó chưa bất khả giản
Ví dụ minh họa:
Xét tiếp câu truy vấn q13
SELECT NHANVIEN HO_TEN
FROM NHANVIEN, TGIAN2
Quan hệ được định nghĩa bởi biến TGIAN2 chạy trên thuộc tính duy nhất MANV Giả sử rằng nó chỉ chứa hai bộ: <E1> và <E2> Phép thế cho TGIAN2 tạo ra hai câu truy vấn con đơn quan hệ:
q131: SELECT NHANVIEN HO_TEN
WHERE NHANVIEN.MANV = “E1”
q132: SELECT NHANVIEN HO_TEN
FROM NHANVIEN
WHERE NHANVIEN.MANV = “E2”
Sau đó chúng có thể được OVQP quản lý
Thuật toán tối ưu hoá INGRES (được gọi INGRES - QOA) được trình bày dưới đây xử lý đệ qui cho đến khi không còn câu truy vấn một quan hệ nào nữa Thuật toán áp dụng các phép chọn và các phép chiếu ngay khi có thể
sử dụng kỹ thuật tách Kết quả của câu truy vấn đơn quan hệ được lưu trong những cấu trúc dữ liệu có khả năng tối ưu hoá những câu truy vấn sau đó (như các nối) và sẽ được OVQP sử dụng Các câu truy vấn bất khả giản còn lại sau phép tách sẽ được sử lý bằng phép thế bộ Câu truy vấn bất khả giản, được kí hiệu là MRQ‟ Quan hệ nhỏ nhất với lực lượng của nó đã được biết
từ kết quả của câu truy vấn trước đó sẽ được chọn để thay thế Phương pháp đơn giản này cho phép tạo ra sẽ do OVQP xử lý, chọn ra đường truy xuất tốt nhất đến quan hệ theo lượng từ hoá vấn tin
Trang 28Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
Thuật toán INGRES- QOA
Input: MRQ: câu truy vấn đa quan hệ có n quan hệ
Output: Câu truy vấn tối ƣu
Output’ run(ORQ i) {thực hiện ORQi }
Output output output’ {trộn tất cả các kết quả lại}
MRQ” thay giá trị cho t trong MRQ‟
Output’ INGRES-QOA(MRQ”) {gọi đệ qui}
Output output output’ {trộn tất cả các kết quả lại}
End-for
End-if
End {INGRES-QOA}
Trang 29Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
1.2.2 Thuật toán System
System R thực hiện tối ưu hoá tĩnh bằng cách tìm kiếm vét cạn không
gian lời giải Đầu vào cho thể tối ưu hoá của System R là cây toán tử do phân
rã câu truy vấn SQL Đầu ra của nó là một hoạch định thực thi để cài đặt các toán tử “tối ưu”
Thay vì thực hiện một cách có hệ thống các phép toán chọn trước các phép nối như trong INGRES, System R chỉ thực hiện nếu điều đó dẫn đến một chiến lược tốt hơn Thể tối ưu sẽ gán một chi phí (theo thời gian) cho mỗi cây
dự tuyển và giữ lại cây có chi phí thấp nhất Những cây dự tuyển có được bằng cách hoán vị các thứ tự nối của n quan hệ của câu truy vấn dựa vào các qui tắc kết hợp và hoán vị Để hạn chế chi phí dành cho việc tối ưu hoá, số lượng các cây được giảm bớt bằng kỹ thuật qui hoạch động Tập hợp các chiến lược khác nhau được xây dựng động để khi hai nối tương đương nhau nhờ hoán vị, chỉ có nối có chi phí thấp nhất mới được giữ lại Ngoài ra các chiến lược phải lấy tích Descartes đều bị loại bỏ ngay khi có thể
Chi phí của một chiến lược dự tuyển là tổ hợp các chi phí xuất nhập và chi phí CPU Ước lượng các chi phí này (vào lúc biên dịch) dựa trên mô hình chi phí có đưa ra các công thức tính chi phí cho mỗi thao tác ở mức thấp (thí
dụ thao tác chọn bằng chỉ mục B-cây) Đối với phần lớn các phép toán (ngoại trừ phép chọn với đối sánh chính xác), công thức tính chi phí đều dựa vào lực lượng của các toán hạng Thông tin về các lực lượng của các quan hệ trong CSDL được tìm thấy trong các thống kê của CSDL, được hệ thống System R
tự động quản lý Lực lượng của các kết quả trung gian được ước lượng dựa vào các hệ số chọn của mỗi phép toán
Thuật toán tối ưu hoá bao gồm hai bước chính Trước tiên là dự đoán phương pháp tốt nhất để truy xuất đến mỗi quan hệ dựa trên một vị từ chọn lựa (là phương pháp có chi phí thấp nhất) Thứ hai đối với mỗi quan hệ R, thứ
Trang 30Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
tự nối tốt nhất sẽ được ước lượng, trong đó trước tiên R sẽ được truy xuất bằng cách sử dụng phương pháp truy xuất đơn quan hệ tốt nhất
Khi xét các nối, chúng ta có hai thuật toán, và một trong hai đã tối ưu trong ngữ cảnh đã cho Đối với nối của hai quan hệ, quan hệ được đọc trước gọi là quan hệ ngoại cảnh (external relation), còn quan hệ kia, là quan hệ có các bộ được tìm dựa theo các giá trị có được từ quan hệ ngoại cảnh sẽ được gọi là quan hệ nội sự (internal relation) Chọn phương pháp nối ở đây là xác định đường truy xuất có chi phí thấp nhất đến nội sự
Phương pháp thứ nhất được việc thiết kế cấu trúc database gọi là lặp lồng (nested loop) tạo ra tích của hai quan hệ Đối với mỗi bộ của ngoại cảnh, từng bộ của nội sự thoả vị từ nối sẽ được truy xuất lần lượt để tạo ra quan hệ kết quả Một chỉ mục trên một thuộc tính nối là một đường truy xuất rất hiệu quả đối với nội sự Khi không có chỉ mục với các quan hệ tương ứng có n1
và n2 trang, chi phí thuật toán tỷ lệ với n1* n2, quá cao khi n1 và n2 lớn
Phương pháp thứ hai được gọi là nối trộn (merge join) gồm có trộn hai quan hệ đã sắp theo thuộc tính nối Chỉ mục trên thuộc tính nối có thể được sử dụng làm đường truy xuất Nếu điều kiện nối là đẳng thức, chi phí nối hai quan hệ n1 và n2 trang tỷ lệ với n1+ n2 Vì thế phương pháp luôn luôn được chọn cho nối bằng và khi các quan hệ đã được xếp thứ tự trước đó Nếu một hoặc cả hai quan hệ đều chưa được sắp, chi phí của thuật toán nối lặp lồng sẽ rất đáng kể so với chi phí của phép nối sắp trộn Chi phí sắp n trang tỉ lệ nlogn Nói chung thuật toán nối trộn sẽ hữu ích khi cần nối các quan hệ lớn
Phiên bản đơn giản của thuật toán tối ưu hoá của System R cho câu truy vấn chọn- chiếu- nối được trình bày trong thuật toán dưới đây có hai vòng Vòng đầu tiên chọn ra đường truy xuất một quan hệ tốt nhất đến mỗi đến mỗi quan hệ trong câu vấn tin, còn vòng thứ hai kiểm tra tất cả các hoán vị khả hữu của các thứ tự nối (có n! hoán vị cho n quan hệ) và chọn ra chiến lược truy
Trang 31Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
xuất tốt nhất cho câu vấn tin Các hoán vị đƣợc tạo ra bằng cách xây dựng
động một cây các chiến lƣợt khác nhau, sau đó là các nối của ba quan hệ
Điều này cứ tiếp tục cho đến khi các nối của n quan hệ đều đƣợc tối ƣu Với
hai Heuristic này, số lƣợng các chiến lƣợc cần kiểm tra có cận trên là 2n
chứ không phải là n!
Thuật toán R-QOA
Input: QT: cây truy vấn có n quan hệ
Output: Câu truy vấn tối ƣu
Chúng ta hãy minh hoạ thuật toán này với câu truy vấn q1 trên CSDL
mẫu đã nêu trên
Trang 32Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
q1: SELECT
FROM
NHANVIEN.HO_TEN NHANVIEN, PHANNHIEM.MANV WHERE NHANVIEN.MANV=PHANNHIEM.MANV
AND PHANNHIEM.MADA=DUAN.MADA AND TENDA= “CSDL”
Để dễ trình bày chúng ta ký hiệu:
E=NHANVIEN, G= PHANNHIEM và J=DUAN
Đồ thị nối của q1 được trình bày trong hình dưới đây Để cho đơn giản, nhãn MANV trên cạnh E G thay cho vị từ E.MANV =G.MANV và nhãn trên cạnh G -J biểu thị cho vị từ G.MADA=J.MADA chúng ta giả sử
có các chỉ mục sau:
E chỉ mục trên MANV
G chỉ mục trên MADA
J chỉ mục trên MADA và một chỉ mục khác trên TENDA
Chúng ta giả sử rằng vòng lặp đầu tiên của thuật toán chọn ra các đường truy xuất một quan hệ như sau (xem Hình 1.1):
E: Quét tuần tự (bởi vì không có phép chọn nàotrên E)
G: Quét tuần tự (bởi vì không có phép chọn nào trên G)
J: Chỉ mục trên TENDA (do có một phép chọn trên J theo TENDA)
Hình 1.1 Đồ thị kết nối của câu truy vấn
Cấu trúc động của cây các chiến lược lựa chọn như hình 1.2 Các phép
toán có đánh dấu "loại bỏ" (pruned) sẽ được loại bỏ tự động Mức một của
cây chỉ ra phương pháp truy cập tốt nhất Các chiến lược (E J) và (J E) bị
Trang 33Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
loại bỏ Giả sử (E G) và (G J) có chi phí cao hơn (G E) và (J G) tương ứng Như vậy chúng có thể bị loại bỏ, vì bằng cách hoán vị chúng ta có các thứ tự kết nối tuơng đương tốt hơn Mức ba đưa ra hai khả năng còn lại, thứ tự kết nối tốt nhất là chi phí ít nhất của ((G E) J) và ((J G) E)
Cuối cùng dựa vào chỉ mục trên thuộc tính chọn và truy nhập rực tiếp đến các bộ kết nối của G và E, vì vậy phương pháp truy nhập sau được chọn:
Hình 1.2 Các thứ tự kết nối lựa chọn
SQL là một ngôn ngữ hỗ trợ đắc lực trong việc tìm kiếm thông tin Tuy nhiên, nó là một trong những yếu tố chính ảnh hưởng trực tiếp đến hiệu suất làm việc của ứng dụng, đóng vai trò quan trọng tương tự như việc thiết kế cấu trúc database Tùy vào cách diễn đạt của một câu lệnh SQL, tốc độ xử lý của
hệ thống sẽ khác nhau, các truy vấn phức tạp sẽ cản trở rất nhiều đến khả năng truy xuất dữ liệu của ứng dụng Bằng cách kiểm tra và tối ưu các câu truy vấn SQL, chúng ta có thể tối ưu hóa và cải thiện hiệu suất làm việc của
hệ thống
(G E) J (J G) E