Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TỐI ƯU MỘT SỐ CÂU LỆNH TRUY VẤN SQL VÀ ỨNG DỤNG C
Trang 1Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Trang 2Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Trang 3Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Người hướng dẫn khoa học: TS.VŨ ĐỨC THÁI
THÁI NGUYÊN - 2015
Trang 4Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Trang 5Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
TỐI ƯU MỘT SỐ CÂU LỆNH TRUY VẤN
SQL VÀ ỨNG DỤNG
Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số: 60 48 01 01
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Người hướng dẫn khoa học Học viên thực hiện
TS VŨ ĐỨC THÁI Chanthiva MANIVONG
Thái nguyên – 2015
Trang 6Số hóa bởi Trung tâm Học liệu – ĐHTN 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 TS.Vũ Đức Thái, đã 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
Thái Nguyên, tháng 12 năm 2015
Tác giả
Chanthiva MANIVONG
Trang 7Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
LỜI CẢM ƠN
Để hoàn thành chương trình cao học và viết luận văn, tôi đã nhận được
sự hướng dẫn, giúp đỡ góp ý nhiệt tình của quý thầy cô trường Đại học Công nghệ Thông tin và Truyền thông – Đại học Thái Nguyên
Tôi xin chân thành cảm ơn đến quý thầy cô trường Đại học Công nghệ Thông tin và Truyền thông - Đại học Thái Nguyên, quý thầy cô Viện CNTT, đặc biệt là những thầy cô đã tận tình dạy bảo cho tôi trong suốt thời gian học tập tại trường
Tôi xin gửi lời cảm ơn sâu sắc đến TS VŨ ĐỨC THÁI đã dành rất nhiều thời gian và tâm huyết, chỉ bảo tận tình hướng dẫn nghiên cứu và giúp tôi hoàn thành luận văn này
Nhân đây, tôi xin chân thành cảm ơn Ban giám hiệu, Phòng Đào tạo Sau Đại học trường Đại học Công nghệ Thông tin và Truyền thông - Đại học Thái Nguyên đã tạo mọi điều kiện để tôi học tập và hoàn thành tốt khóa học
Mặc dù đã cố gắng hoàn thành luận văn bằng tất cả sự nhiệt tình tâm huyết và năng lực của mình Tuy nhiên, luận văn không thể tránh những thiếu sót, tôi rất mong nhận được những đóng góp quý báu của quý thầy cô và các bạn
Lời cảm ơn sau cùng tôi xin dành cho gia đình và những người bạn đã hết lòng quan tâm giúp đỡ, tạo điều kiện tốt nhất để tôi hoàn thành luận văn tốt nghiệp này
Tôi xin chân thành cảm ơn!
Thái Nguyên, tháng 12 năm 2015
Học viên thực hiện
Chanthiva MANIVONG
Trang 8Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
MỤC LỤC
LỜI CAM ĐOAN i
MỤC LỤC ii
DANH MỤC CÁC KÝ HIỆU v
DANH MỤC CÁC CHỮ VIẾT TẮT vi
DANH MỤC BẢNG BIỂU vii
DANH MỤC HÌNH ẢNH viii
LỜI NÓI ĐẦU 1
CHƯƠNG 1 NHỮNG VẤN ĐỀ CƠ BẢN VỀ CSDL VÀ CÂU LỆNH SQL 2
1.1 Cơ sở dữ liệu quan hệ 2
1.1.1 Vai trò của hệ thống thông tin 2
1.1.2 Các chức năng của một hệ quản trị CSDL 3
1.1.3 Các thành phần của một hệ QTCSDL 4
1.2 Giới thiệu ngôn ngữ SQL 4
1.3 Ngôn ngữ định nghĩa dữ liệu 5
1.4 Ngôn ngữ truy vấn dữ liệu SQL (Structured Query Language) 6
CHƯƠNG 2 CÁC GIẢI PHÁP VÀ THUẬT TOÁN TỐI ƯU CÂU LỆNH SQL 14
2.1 Tối ưu hóa câu lệnh SQL 14
2.2 Một số nguyên tắc trong tối ưu 14
2.3 Một số chiến lược tối ưu 16
2.4 Một số thuật toán 18
2.4.1.Thuật toán Ingres 18
2.4.2 Thuật toán INGRES- QOA 25
2.4.3 Thuật toán System 25
2.4.4 Thuật toán R-QOA 27
2.5 Phương pháp phân rã SQL 30
2.5.1 Nôi dung của phương pháp phân rã SQL 30
2.5.2 Những ưu và nhược điểm của phương pháp phân rã SQL 35
2.5.3 Ứng dụng của phương pháp phân rã SQL 36
2.6 Phương pháp thay thế SQL 37
2.6.1 Bản chất của vấn đề thay thế SQL 37
Trang 9Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
2.6.2 Những ưu và nhược điểm của của phương pháp thay thế SQL 38
2.6.3 Ứng dụng của phương pháp thay thế SQL 40
2.7 Thuật toán xử lý tiền tối ưu câu SQL 41
2.8 Một số kỹ thuật tối ưu 46
2.8.1 Nguyên nhân làm giảm tốc độ xử lý 46
2.8.2 Các câu truy vấn được viết nghèo nàn và một só cách khắc phục: 46
CHƯƠNG 3 CHƯƠNG TRÌNH THỬ NGHIỆM TỐI ƯU MỘT SỐ CÂU LỆNH 53
3.1 Mô tả bài toán 53
3.2 Thiết kế các bảng dữ liệu cho hệ thống 54
3.3 Thử nghiệm tiền tối ưu câu lệnh SQL 57
3.3.1 Xây dựng chương trình thử nghiệm 57
3.3.2 Thực hiện thử nghiệm 58
KẾT LUẬN 67
TÀI LIỆU THAM KHẢO 68
Trang 10Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Trang 11Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
DANH MỤC CÁC CHỮ VIẾT TẮT
AQL Algebraic Query Language (Ngôn ngữ vấn tin đại số)
CSDLCơ sở dữ liệu
CPUCentral Processing Unit (Bộ xử lý trung tâm)
OOPObject 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)
SQLStructured Query Language (Ngôn ngữ truy vấn có cấu trúc)
OVQPOne Variable Query processor (thể xử lý truy vấn một biến) ORQ Đơn quan hệ
MRQĐa quan hệ
Trang 12Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
DANH MỤC BẢNG BIỂU
Bảng 2.1 NHAN VIEN 20
Bảng 2.2 PHAN NHIEM VU 20
Bảng 2.3 Du An 22
Bảng 2.4 LUONG 22
Bảng 2.5 Số liệu của quan hệ DanhHieu 32
Bảng 2.6 Số liệu quan hệ ThamGiaCM 33
Bảng 2.7 Số liệu quan hệ KhenThuong 33
Bảng 2.8 Kết quả danh sách người nhận huân chương 38
Bảng 2.9 Số liệu của quan hệ DanhHieu 42
Bảng 2.10 Số liệu quan hệ ThamGiaCM 42
Bảng 2.11 Số liệu quan hệ KhenThưởng 44
Bảng 2.12 Kết quả sau khi thực hiện thuật toán tối ưu 46
Bảng 3.1 Sinh viên 54
Bảng 3.2 Lớp 55
Bảng 3.3 Môn học 55
Bảng 3.4 Điểm 56
Bảng 3.5 Điểm rèn luyện 56
Bảng 3.6 Điểm học kỳ 56
Trang 13Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
DANH MỤC HÌNH ẢNH
Hình 2.1 Đồ thị kết nối của câu truy vấn 29
Hình 2.2 Các thứ tự kết nối lựa chọn 29
Hình 3.1 Cơ sở dữ liệu thực nghiệm 57
Hình 3.2 Giao diện chính chương trình 57
Hình 3.3 Giao diện phần chèn dữ liệu tự động 58
Hình 3.4 Thực hiện truy vấn lấy danh sách điểm sinh viên đã học môn Toán cao cấp 1 59 Hình 3.5 Thực hiện truy vấn lấy danh sách điểm sinh viên sau khi tối ưu 61
Hình 3.6 Thực hiện truy vấn lấy thông tin lý lịch sinh viên 61
Hình 3.7 Thực hiện truy vấn lấy thông tin sinh viên sau khi tối ưu SQL 62
Trang 14Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
LỜI NÓI ĐẦ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 Người dùng cũng phân tán nhiều địa điểm với khoảng cách không gian lớn tần suất truy cập sử dụng cơ sở dữ liệu khác nhau Do đó 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 chương trình rất có ý nghĩa vì kinh phí đầu
tư của 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ế Để tối ưu câu lênh trong chương trình phần mềm ta cần thử nghiệm các câu lệnh đơn lẻ đảm bảo các yêu cầu sau đó mới có thể áp dụng cho một chương trình tổng hợp Các giải pháp, thuật toán tối ưu hóa đến từng câu lệnh cần được nghiên cứu phân tích và thử nghiệm cẩn thận
Nếu câu vấn tin SQL (Structured Query Language) đã được tối ưu trước khi thực hện truy vấn sẽ nâng cao hiệu quả của chương trình và tiết kiệm chi phí Nhận thấy được mức độ cấp thiết của vấn đề và được sự gợi ý của thầy giáo
hướng dẫn em đã chọn đề tài: “Tối ưu một số câu lệnh truy vấn SQL và ứng dụng” làm luận văn tốt nghiệp của mình
Trong phạm vì 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 Nội dung luận văn gồm 03 chương:
Chương 1: Giới thiệu vấn đề cơ bản về CSDL và câu lệnh truy vấn SQL Chương 2: Các giải pháp và thuật toán tối ưu cân lệnh SQL
Chương 3: Xây dựng chương trình thử nghiệm
Trong đó, tập trung vào các thuật toán được thử nghiệm phân tích ở chương 2 Sau khi thử nghiệm thành công có thể khuyến khích các lập trình viên
sử dụng linh hoạt trong các bài toán cụ thể Từ đó khi xây dựng các phần mềm ứng dụng các nhà phát triển có thể ứng dụng để chọn lựa sử dụng trong một chương trình cụ thể để có thể tối ưu cho nhiều đoạn mã tương tự
Trang 15Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
CHƯƠNG 1 NHỮNG VẤN ĐỀ CƠ BẢN VỀ CSDL VÀ CÂU LỆNH SQL
1.1 Cơ sở dữ liệu quan hệ
1.1.1 Vai trò của hệ thống thông tin
Mọi hoạt động kinh doanh của một doan nghiệp đều phải lưu trữ chứng từ, tài liệu, số liệu phục vụ công tác kinh doanh, hạch toán kinh tế, theo dõi quá trình kinh doanh đảm bảo hiệu quả Những thông tin đó gọi là cơ sở dữ liệu kinh doanh Trước khi có công nghệ thông tin hỗ trợ, các nhà doanh nghiệp phải lưu trữ, xử lý thông tin bằng các công cụ thủ công, hoặc bán thủ công Khi công nghệ thông tin với máy tính điện tử phát triển hỗ trợ việc xử lý dữ liệu đóng góp to lớn vào hiệu quả kinh doanh của doanh nghiệp Những thông tin phục vụ kinh doanh có những biến đổi quann trọng với những cấu trúc phức tạp, tinh vi, khối lượng lớn, chất lượng cao ngày càng có giá trị trong hoạt động kinh doanh
Từ những thông tin, tài liệu thô sơ ban đầu đã hình thành nên hệ cơ sở dữ liệu bao gồm thiết bị phần cứng để lưu trữ, xử lý, truyền thông và cung cấp thông tin đến dữ liệu và các phần mềm thao tác dữ liệu với nhiều mô hình đa dạng phong phú có nhiều quy mô, nhiều lớp
Mọi doanh nghiệp đều có chức năng kinh doanh để thực hiện những công việc sinh ra lợi nhuận Để thực hiện chức năng kinh doanh hiệu quả doanh nghiệp cần xử lý các thông tin liên quan đến quá trình kinh doanh Nếu tổ chức tốt thông tin việc kinh doanh của doanh nghiệp sẽ có hiệu quả, ổn định và giúp doanh nghiệp phát triển Thông tin phục vụ cho kinh doanh chính là cơ sở dữ liệu
về toàn bộ quá trình kinh doanh được lưu trữ theo một cấu trúc thích hợp, đáp ứng mọi thông tin cho việc điều hành, ra quyết định và định hướng cho doanh nghiệp
Mô hình khái niệm có vai trò rất lớn để xây dựng nên một cơ sở dữ liệu nhất là trường hợp doanh nghiệp bắt đầu hoạt động Nó mô tả đầy đủ chính xác thông tin cần cho doanh nghiệp, tránh được sự nhầm lẫn thiếu hụt thông tin có thể dự phòng cho sự phát triển của doanh nghiệp trong một tương lai lâu dài Là nền tảng vững chắc cho việc cài đặt thực thi vận hành Việc xây dựng mô hình
Trang 16Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
khái niệm tốt sẽ mang lại hiệu quả cao vì mọi thiệt hại ở giai đoạn này không tốn kém việc thay đổi chỉnh sửa rất dễ dàng Nếu khi lắp đặt hệ thống đã chi phí thiết
bị, phầnm mềm mà thay đổi sẽ kéo theo những thiệt hại lớn
Một hệ cơ sở dữ liệu bao gồm cơ sở dữ liệu được tổ chức theo một mô hình chuẩn và lưu trữ trên hệ thống các thiết bị lưu trữ vật lý có các công cụ và các dịch vụ để tạo lập và sử dụng trích xuất thông tin đáp ứng nhu cầu kinh doanh của doanh nghiệp Do sự phát triển của công nghệ việc lưu trữ vật lý cũng
có nhiều giải pháp như lưu trữ tập trung, lưu trữ phân tán, kho dữ liệu…Khi xây dựng hệ cơ sở dữ liệu phải đạt được những yêu cầu sau:
- Lưu trữ được đầy đủ, chính xác thông tin cần thiết cho quá trình quản lý kinh doanh
- Mô hình khái niệm phải được phân tích rõ ràng, hoàn chỉnh trước khi thực thi cài đặt cơ sở dữ liệu trên thiết bị vật lý
- Dữ liệu không được lưu trữ dư thừa trong mô hình vì nếu lưu trữ trùng lặp khi cập nhật sẽ phát sinh sự không nhất quán người dùng không biết dữ liệu nào là chính xác để sử dụng Đồng thời cũng không lưu trữ dữ liệu kết xuất nghĩa
là được suy dẫn từ dữ liệu khác
- Hệ cơ sở dữ liệu phải có tính mở, nghĩa là có vị trí lưu trữ dự phòng cho
sự phát triển trong tương lai sao cho vẫn đảm bảo tính liên kết, lô gic trong lưu trữ vật lý
Để thực hiện xây dựng một hệ CSDL, các nhà cung cấp dịch vụ xây dựng nên các Hệ quản trị CSDL là công cụ để thực thi cài đặt CSDL và cung cấp các thao tác tạo lập và truy xuất vào CSDL lấy ra thông tin
1.1.2 Các chức năng của một hệ quản trị CSDL
Một hệ quản trị CSDL thực hiện các chức năng sau:
+ Tạo cấu trúc dữ liệu tương ứng với mô hình dữ liệu được chọn
+ Đảm bảo tính độc lập dữ liệu
+ Cho phép cập nhật dữ liệu
+ Kết xuất ra được các báo cáo từ các dữ liệu trong CSDL
+ Đảm bảo tính an toàn và toàn vẹn dữ liệu trong CSDL
+ Cung cấp các tiện ích sao lưu phục hồi dữ liệu
Trang 17Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
+ Cung cấp các thủ tục điều khiển tương tranh
1.1.3 Các thành phần của một hệ QTCSDL
Một hệ quản trị thông thường có các thành phần chính sau:
+ Ngôn ngữ định nghĩa dữ liệu (Data Definition Language)
+ Ngôn ngữ thao tác dữ liệu (Data Manipulation Language)
+ Ngôn ngữ hỏi đáp dữ liệu (Query Language)
+ Bộ viết báo cáo
+ Từ điển dữ liệu
+ Bộ phát sinh đồ hoạ
1.2 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, )
Trang 18Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
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
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.3 Ngôn ngữ định nghĩa dữ liệu
(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, 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, Qty Integer,
Sdate Date Not Null, Price Decimal (8,2) )
Trang 19Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Lệnh xóa bảng
Cú pháp
Drop Table Tên bảng
Lệnh nhập dữ liệu
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.4 Ngôn ngữ truy vấn dữ liệu 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 (column) hay trường (field), bộ (tupe) với bản ghi (record) hay hàng (row)
Cú pháp
select: Xác định nội dung của các cột cần đưa ra kết quả
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:
Trang 20Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
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
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
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
Trang 21Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Trong trường hợp người sử dụng, không nhớ rõ tên người hoặc địa danh
ví dụ là Hoa hay Hoan khi đó có thể viết:
SELECT *
FROM S
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 : 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
Trang 22Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
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
Cho biết số lần mặt hàng P2 đã được cung cấp
SELECT COUNT ( * )
FROM SP
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# )
Trang 23Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
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
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à đủ
Trang 24Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Trang 25Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
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
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 26Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Trong nhiều trường hợp có thể thay thế giữa các các mệnh đề „exists‟ với
IN hoặc NOT IN, EQUAL ANY tương đương với not equal all v.v
WHERE S# <> ALL (SELECT S# FROM SP)
Tóm lại, chương 1 trình bày những kiến thức cơ bản về cớ sở dữ liệu, câu vấn tin SQL, quá trình tối ưu hóa và ngôn ngữ lập trình bậc cao Đây là cơ sở lý thuyết nền tảng cho qua trình tối ưu hóa vấn tin Chương 2 sẽ trình bày các bước phân rã và thay thế các câu SQL để nhằm mục đích tối ưu hóa câu vấn tin Tuy nhiên, trong quá trình xử lý nhiều khi mỗi câu lệnh phải thực hiện nhiều phép toán trong đó có phép toán có độ phức tạp cao như phép kết nối, tích đề các…Để giảm số lượng phép toán tăng tốc độ xử lý và tiết kiệm không gian nhớ người ta đưa ra giải pháp tối ưu hóa câu lệnh Vấn đề tối ưu thực hiện ở đây có thể là tối
ưu về tốc độ nghĩa là làm sao cho thời gian xử lý nhỏ nhất; tối ưu về tài nguyên nghĩa là sử dụng bộ nhớ ít nhất Tùy tình huống cụ thể khi không tối ưu cả hai tiêu chí đồng thời thì chọn một trong hai tiêu chí Chương 2 tập trung trình bày các vấn đề về tối ưu hóa các câu lệnh và đề xuất bài toán ứng dụng
Trang 27Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
CHƯƠNG 2 CÁC GIẢI PHÁP VÀ THUẬT TOÁN TỐI ƯU CÂU LỆNH SQL
2.1 Tối ưu hóa câu lệnh SQL
Tối ưu hóa dữ liệu là một chủ đề lớn và bao hàm nhiều vấn đề, nhiều yếu
tố, bao gồm cả cấu hình phần mềm, cài đặt Windows, xử lý bộ đệm,… trong đó, vấn đề tối ưu hóa các câu truy vấn là vấn đề quan trọng ảnh hưởng đến hiệu quả
xử lý cơ sở dữ liệu
Tối ưu hóa vấn tin nhằm chọn ra điểm tốt nhất trong không gian lời giải của tất cả chiến lược khả thi, hay biến đổi câu vấn tin cấp cao thành một câu vấn tin tương ở mức thấp hơn nhưng đều cho ra cùng kết quả
Ngôn ngữ thao tác dữ liệu gồm:
Đại số quan hệ (biểu thức đại số)
SQL (ánh xạ)
Luật Datalog
Có nhiều phương pháp tối ưu hóa vấn tin nhưng cách nào giảm được thời gian thực thi và giảm thiểu chi phí tiêu dùng tài nguyên
2.2 Một số nguyên tắc trong tối ưu
1 Sử dụng lệnh UNION ALL thay cho lệnh UNION bất cứ khi nào có thể
Lệnh UNION ALL chạy nhanh hơn lệnh UNION vì nó không kiểm tra các bản ghi trùng lặp, trong khi đó lệnh UNION luôn luôn kiểm tra các bản ghi xem có trùng lặp hay không
2 Sử dụng thêm lệnh SET NOCOUNT ON trong các stored procedures
Thông thường T-SQL sẽ thông báo tổng số các bản ghi bị tác động khi thực thi một lệnh SQL Tuy nhiên, nếu chúng ta sử dụng lệnh SET NOCOUNT
ON ở đầu các stored procedures thì hệ thống không trả về thông báo nữa Việc này tiết kiệm lưu lượng mạng chút xíu
3 Hạn chế tối đa việc sử dụng mệnh đề DISTINCT
Mệnh đề DISTINCT làm chậm hệ thống đi trông thấy ta nên hạn chế sử dụng câu lệnh này khi không cần thiết
Trang 28Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
4 Hạn chế sử dụng các trigger, thay bằng các constraints khi có thể
Sử dụng constraints hiệu quả hơn các triggers
5 Sử dụng SYSINDEXES để lấy số bản ghi
Hầu hết chúng ta sử dụng lệnh COUNT(*) để lấy số bản ghi, tuy nhiên bảng sysindexes lưu trữ tổng số bản ghi của tất cả các bảng dữ liệu người dùng
do vậy chúng ta có thể lấy từ bảng này thay vì dùng lệnh COUNT(*) Ngoài ra còn có một số cách khác nữa
Ví dụ: SELECT rows FROM sysindexes WHERE id = OBJECT_ID ('table_name')
6 Sử dụng VIEW và Stored Procedure thay cho các câu lệnh truy vấn phức tạp
7 Sử dụng giải mã nếu có thể
Để tránh phải duyệt một bản ghi nhiều lần, DECODE có thể được sử dụng trong các câu lệnh GROUP BY và ORDER BY
Ví dụ:
SELECT id FROM employee
WHERE name LIKE 'Arun%'
and location = 'USA';
thay vì
SELECT DECODE(location,'USA',id,NULL) id FROM employee
WHERE name LIKE 'Arun%';
8 Giảm thiểu các sub query
SELECT name FROM employee WHERE (sal, experience) = (SELECT MAX (sal), MAX (experience) FROM employee_details) AND dept =
'Accounts';
9 Chỉ nên so sánh các loại giá trị cùng kiểu
So sánh cùng kiểu giúp hệ thống không phải chuyển kiểu do đó cải thiện tốc độ bớt thao tác chuyển đổi kiểu dữ liệu
Ví dụ:
ON DECIMAL(A.INTCOL, 7, 0) = B.DECICOL
ON A.INTCOL = INTEGER(B.DECICOL)
Trang 29Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
10 Chỉ trả về các cột dữ liệu cần thiết
Trả về toàn bộ dữ liệu sẽ làm tăng dung lượng mạng do vậy nên hạn chế nếu có thể
2.3 Một số chiến lược tối ưu
- Đưa phép chọn, chiếu xuống thực hiện sớm nhất
- Xử lý độc lập các tệp trước khi xử lý chung CSDL
Có thể xắp xếp, tạo tệp chỉ số cho từng quan hệ độc lập trước khi xử lý
- Lựa chọn thứ tự thực hiện các phép toán
Tuỳ theo ưu tiên dung lượng bộ nhớ hay số thao tác thực hiện
- Sử dụng các phép biến đổi tương đương
Giao hoán giữa phép chọn và phép tích Đề -các
-Nếu các điều kiện chọn chỉ liên quan đến R1
Trang 30Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Giao hoán giữa một phép chiếu và phép tích Đề các
Nếu các thuộc tính A1, A2, ,An r1; B1, B2, ,Bn r2, ta có:
A1A2…An,B1B2….Bn (r1 xr2) = A1A2 An,(r1) x B1B2 Bn (r2)
Giao hoán giữa một phép chiếu và một phép hợp
A1A2…An (r1 r2) = A1A2 An,(r1) A1A2 An (r2)
Ví dụ:
Cho biết tên công ty cung cấp mặt hàng màu đỏ
*Dùng đại số quan hệ
tên congty(màu =”đỏ” (congty.C# = Cungcap.C#
(cungcap.H#=hanghoa.H# (congty x hanghoa x cungcap))))
-Đẩy phép chọn lên trước
tên congty(màu =”đỏ” (congty.C# = Cungcap.C#
(congty x cungcap.H#=hanghoa.H#(hanghoa x cungcap)))
Trang 31Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
tên congty(congty x (màu =”đỏ” hanghoa) * cungcap))
C# H#
*Dùng SQL
-Không tối ưu:
SELECT têncongty
FROM Congty, Hanghoa,Cungcap
WHERE (congty.C# = Cungcap.C#) AND (Cungcap.H# = Hanghoa.H#) AND (Hanghoa màu = “Đỏ”)
FROM Hanghoa
WHERE Màu = “Đỏ”)))
2.4 Một số thuật toán
2.4.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 ư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
Trang 32Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
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
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ả
Trang 33Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
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
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 Bảng 2.2 PHAN NHIEM VU
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 34Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Trang 35Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Bảng 2.3 Du An
D1 D2 D3 D4 D5
CSDL CÀI ĐẶT BẢO TRÌ PHÁT TRIỂN PHẦN MỀM
1000
2500
3000
4000
Để 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
Trang 36Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
q‟: SELECT
FROMD
WHERE
NHANVIEN HO_TEN NHANVIEN, PHANNHIEM, TGIAN1 NHANVIEN.MANV = PHANNHIEM.MANV AND
PHANNHIEM.MADA =TGIAN1.MADA
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}
Trang 37Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Vì thế đối với mỗi bộ thu được, câu truy vấn con được xử lý đệ quy 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
WHERE NHANVIEN.MANV = TGIAN2.MANV
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 38Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
2.4.2 Thuật toán INGRES- QOA
Input: MRQ: câu truy vấn đa quan hệ có n quan hệ
ORQ1, , ORQm, MRQ’ MRQ
For i 1 to m do
begin
Output’ run(ORQ i) {thực hiện ORQi }
Output output output’ {trộn tất cả các kết quả lại}
End-for
R CHOOSE_ VARIABLE(MRQ’) {R được chọn cho phép thế bộ}
For mỗi bộ t R do
begin
MRQ” thay giá trị cho t trong MRQ‟
Output output output’ {trộn tất cả các kết quả lại}
End
End-for
End {INGRES-QOA}
2.4.3 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” cho câu lệnh
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
Trang 39Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
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ứ 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ộ
Trang 40Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
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 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!
2.4.4 Thuật toán R-QOA
Input: QT: cây truy vấn có n quan hệ