Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 69 trang
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
Nội dung
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 Mã số: V2015-15 Xác nhận quan Chủ nhiệm đề tài chủ trì đề tài ThS Mai Thị Thúy Hà Hà Nội – 12/2015 Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu DANH SÁCH THÀNH VIÊN THAM GIA NGHIÊN CỨU ĐỀ TÀI VÀ ĐƠN VỊ PHỐI HỢP Danh sách thành viên tham gia nghiên cứu đề tài ThS Trịnh Thị Xuân ThS Nguyễn Thùy Linh Các đơn vị phối hợp Khoa Đào tạo từ xa Khoa Công nghệ thông tin Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu MỤC LỤC DANH MỤC HÌNH VẼ PHẦN I – PHẦN MỞ ĐẦU I Tính cấp thiết đề tài I.2 Mục đích nghiên cứu I.3 Đối tượng phạm vi nghiên cứu I.4 Phương pháp nghiên cứu I.5 Các kết dự kiến đạt PHẦN II - NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU Chương - Tổng quan tối ưu hóa truy vấn sở liệu7 1.1 Giới thiệu xử lý truy vấn 1.2 Các yêu cầu phép biến đổi tối ưu hóa truy vấn 1.3 Các phương pháp xử lý truy vấn 10 1.3.1 Các thuật tốn cho việc xếp ngồi 10 1.3.2 Các giải thuật phép chọn (select) phép nối (join) 13 1.3.2.1 Thực phép chọn (Select) 13 1.3.2.2 Thực phép nối (join) 18 1.3.3 Các giải thuật phép chiếu (project) phép toán tập hợp 27 1.3.4 Sự thực phép toán kết hợp phép nối 32 1.3.4.1 Sự thực phép toán kết hợp 32 1.3.4.2 Sự thực phép nối 33 Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu 1.3.5 Sự kết hợp phép toán kỹ thuật đường ống 37 Chương - 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 tốn Heuristics 39 2.1.1 Các qui tắc chuyển đổi tổng quát phép toán đại số quan hệ 45 2.1.2 Các bước 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ụ hàm chi phí phép chọn (select) 51 2.2.2 Các hàm chi phí nối (Join) 53 2.2.3 Các truy vấn đa quan hệ thứ tự nối (Join) 55 Chương - Ứng dụng tối ưu hóa truy vấn hệ thống TMAS 57 3.1 Tối ưu hóa hệ quản trị sở liệu MySQL Server 57 3.1.1 Nguyên tắc - Ghi rõ tên cột câu lệnh SELECT 57 3.1.2 Nguyên tắc - Ghi rõ tên cột câu lệnh INSERT 58 3.1.3 Nguyên tắc - Chỉ dùng DISTINCT cần 58 3.1.4 Nguyên tắc - Chỉ dùng UNION cần 59 3.1.5 Nguyên tắc - Sử dụng EXPLAIN để phân tích truy vấn 59 3.1.6 Nguyên tắc - Sử dụng INDEX 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 Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu DANH MỤC HÌNH VẼ Hình 1.1 Các bước đặc trưng xử lí truy vấn mức cao Hình 1.2 Tổng quan thuật toán trộn xếp ngồi 12 Hình 1.3 Thực phép T R A=BS cách sử dụng Sort-merge, R có n S có m 20 Hình 1.4 Thực phép T Л(R) cách sử dụng Sort- merge, R có n S có m 28 Hình 1.5 Thực phép T R ∪ S cách sử dụng Sort-merge, R có n S có m 29 Hình 1.6 Thực phép T ← R ∩ S cách sử dụng Sort-merge, R có n S có m 30 Hình 1.7 Thực phép T R - S cách sử dụng Sort-merge, R có n S có m 31 Hình 2.1 Các bước chuyển đổi truy vấn suốt q trình tối ưu hóa cách sử dụng heuristic (a) Cây truy vấn ban đầu ứng với SQL (b) Chuyển phép chọn xuống truy vấn (c) Ưu tiên áp dụng phép chọn có giới hạn (d) Thay tích Đề Các phép chọn phép nối (e)Chuyển phép chiếu xuống truy vấn 44 Hình 3.1 Giao diện chương trình 66 Hình 3.2 So sánh thời gian thực truy vấn tối ưu 66 Hình 3.3 Kết chạy demo câu truy vấn sử dụng thuật toán Heuristics 67 Hình 3.4 Kết chạy demo câu truy vấn sử dụng thuật toán Heuristics 67 Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu PHẦN I – PHẦN MỞ ĐẦU I Tính cấp thiết đề tài Hiệu ứng dụng phụ thuộc vào nhiều yếu tố, có yếu tố quan trọng thời gian để máy chủ SQL xử lý câu lệnh T-SQL Đôi thiết kế sở liệu yêu cầu truy vấn phức tạp làm cản trở tốc độ thực thi câu lệnh TSQL Các thuật toán xử lý tối ưu hóa truy vấn thuật tốn hữu ích trình xử lý sở liệu nâng cao hiệu ứng dụng thực tiễn Hiện nay, thực trạng ứ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ị tải dẫn đễn việc xử lý liệu chậm có nhiều trường hợp bị sập máy chủ Đây khó khăn thường gặp phải xây dựng ứng dụng, đặc biệt ứng dụng trực tuyến với số lượng truy cập lớn truy vấn phức tạp I.2 Mục đích nghiên cứu Nghiên cứu áp dụng thuật tốn tối ưu hóa truy vấn CSDL để hỗ trợ giải vấn đề nâng cao hiệu ứng dụng Hệ thống hỗ trợ Quản lý đào tạo Từ Xa Viện Đại học Mở Hà Nội I.3 Đối tượng phạm vi nghiên cứu Đối tượng nghiên cứu phương pháp truy vấn Phạm vi nghiên cứu kỹ thuật đồng tối ưu truy vấn sở liệu I.4 Phương pháp nghiên cứu Nghiên cứu lý thuyết khai phá liệu, tối ưu hóa truy vấn, ứng dụng phương pháp vào thiết kế xây dựng hệ thống hỗ trợ quản lý đào tạo Từ Xa Viện Đại học Mở Hà Nội I.5 Các kết dự kiến đạt - Trình bày phương pháp tối ưu hóa truy vấn - Cài đặt thử nghiệm thuật tốn tối ưu hóa truy vấn Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) Nghiên cứu ứng dụng thuật tốn tối ưu hóa truy vấn sở liệu PHẦN II - NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU Chương -Tổng quan tối ưu hóa truy vấn sở liệu 1.1 Giới thiệu xử lý truy vấn Chương trình bày kỹ thuật sử dụng hệ quản trị sở liệu (Database Management System - DBMS) để xử lý truy vấn bậc cao.Một truy vấn biểu diễn ngôn ngữ truy vấn bậc cao, chẳng hạn SQL, phải kiểm tra, phân tích cú pháp, xác nhận tính hợp lệ Việc kiểm tra nhận dạngtruy vấn viết ngôn ngữ nàothông qua việc nhận dạng thẻtruy vấn, chẳng hạn từ khóa SQL, tên thuộc tính, tên quan hệ phần chữ câu truy vấn Trong đó, 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 xác định xem nó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 phải xác nhận tính hợp lệ, tức kiểm tra tất quan hệ thuộc tính sử dụng truy vấn khai báo hay chưa.Sau đó, truy vấn thường biểu diễn dạng cấu trúc liệu cây, gọi làcây truy vấn.Tuy nhiên, biểu diễn dạng cấu trúc liệu đồ thị, gọi đồ thị truy vấn.Tiếp theo, hệ quản trị sở liệu phải đặt chiến lượcthực hiệnhoặckế hoạch truy vấnđể lấy cáckết quảcủa truy vấntừ tập tincơ sở liệu.Một truy vấn thường có nhiều chiến lược để thực hiện, q trình chọn lựa cách xử lý truy vấn thích hợp gọi tối ưu hóa truy vấn Hình 1.1 mô tả bước khác việc xử lí truy vấn bậc cao.Tối ưu hóa truy vấn có nhiệm vụ đưa chiến lược tốt, sinh mã để thực chiến lược đó.Cácbộ xử lýcơ sở liệuthời gian chạycónhiệm vụ thực hiệnmãtruy vấnđể đưa kết truy vấn Khi kết chạy lỗi, thông báo lỗi đưa Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu Truy vấn ngơn ngữ bậc cao Kiểm tra, phân tích cú pháp 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 Tạo mã truy vấn Viết mã cho việc thực truy vấn Xử lý sở liệu thời Kết truy vấn Hình 1.1 Các bước đặc trưng xử lí truy vấn mức cao Báo cáo nàytập trungbiểu diễntối ưu hóatruy vấn trongngữ cảnh mộthệ quản trị sở liệu quan hệ (Relational Database Management System – RDBMS).Mộthệ quản trị sở liệu quan hệphảiđánh giámột cách hệ thốngcác chiến lượcthực truy vấnthay vàchọn chiến lượchợp lý hiệu quảhoặcgần tối ưu Mỗihệ quản trị sở liệuthường cómộtsố thuật tốntruy cậpcơ sở liệuchungthực phép toánđại sốquan hệ nhưSELECT, hoặcJOIN, kết hợpcủacác phép toán Chỉcác chiến lượcđượcthực hiệnbởi thuật toántruy cậphệ quản trị sở liệu Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu vàáp dụng chocáctruy vấn cụ thể, nhưcácthiết kếcơ sở liệu vật lý cụ thể mớicó thểđược xem tối ưu hóatruy vấn Chương bắt đầu trình bày cách chuyển câu truy vấn SQL sang đại số quan hệ sau tối ưu hóa Tiếp theo, trình bày thuật tốn để thực phép toán đại số quan hệ 1.2 Các yêu cầu phép biến đổi tối ưu hóa truy vấn Trong thực tế, SQL ngôn ngữ truy vấn sử dụng hầu hết hệ quản trị sở liệu quan hệ Đầu tiên, câu truy vấn chuyển đổi sang biểu thức đại số quan hệ mở rộng tương đương, biểu diễn dạng cấu trúc truy vấn, sau tối ưu hóa Thơng thường, câu truy vấn SQL phân tích thành khối truy vấn, tạo thành cácđơn vịcơ bảncó thể chuyển đổi sang phép toán đại số tối ưu hóa Một khối truy vấn bao gồm biểu thức đơn SELECT-FROMWHERE, mệnh đề GROUP BY HAVING chúng phần củakhối Vì vậy, truy vấn lồng xác định khối truy vấn riêng biệt SQL bao gồm tập hợp phép toán chẳng hạn nhưMAX, MIN, SUM COUNT, phép toán bao gồm đại số mở rộng Ví dụ 1.1:Xét câu truy vấn SQL 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ã Đăng kí mơn, Mã DSThi FROM Điểm_Thi WHERE Điểm thi>= (SELECT MAX(Điểm thi) FROM WHERE Điểm_Thi Mã DSThi = ‘105-28112015-1’); Câu truy vấn bao gồm truy vấn lồng phân tích thành hai khối Khối bên là: (SELECT MAX(Điểm thi) Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu FROM WHERE Điểm_Thi Mã DSThi = ‘105-28112015-1’); Và khối SELECT Mã Đăng kí mơn, Mã DSThi FROM Điểm_Thi WHERE Điểm thi>= C Trong C biểu diễn kết trả từ khối Khối 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 ℑ phép kết hợp hàm (AGGREGATE FUNCTION: SUM, AVERAGE, MAXIMUM, MINIMUM, COUNT) Và block ngồ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 cách thực khối Chúng ta lưu ý Ví dụ 1.1, khối cần định giá để đưa Điểm thi cao nhất, sau đó, dùng số C cho khối 1.3 Các phương pháp xử lý truy vấn 1.3.1 Các thuật toán cho việc xếp ngồi Sắp xếp thuật tốn sử dụng xử lý truy vấn Chẳng hạn, câu truy vấn SQL mà có chứa mệnh đề ORDER BY, kết truy vấn phải xếp.Sắp xếp phần then chốt giải thuật xếp trộn (Merge Sort) sử dụng cho phép JOIN phép khác (chẳng hạn nhưUNION INTERSECTION), giải thuật loại trừ giống phép PROJECT (khi câu truy vấn SQL có tùy chọn DISTINCT mệnh đề SELECT) Chúng ta thảo luận giải thuật phần Lưu ý rằng, việc xếp khơng dùng tồn mục thích hợp tồn cho phép truy cập thứ tự đến ghi Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 10 Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu 2.2.3 Các truy vấn đa quan hệ thứ tự nối (Join) Các quy tắc chuyển đổi đại số phần tối ưu hóa truy vấn Heurisstic gồm quy tắc giao hoán quy tắc kết hợp phép nối Với quy tắc này, nhiều biểu thức nối tương đương tạo Kết số truy vấn có khả tăng nhanh số phép nối truy vấn tăng Tổng quát, truy vấn nối n quan hệ có n – phép nối có số lượng lớn thứ tự nối khác Việc ước lượng chi phí củamọi kết nối truy vấn có số lượng lớn phép kết nối tối ưu hóa truy vấn cần khoảng thời gian đáng kể Do đó, việc lược bớt số truy vấn cần thiết Các tối ưu hóa câu truy vấn thường giới hạn cấu trúc truy vấn (nối) đến độ sâu trái (left-deep tree) độ sâu phải Một độ sâu trái nhị phân phải nút (không phải nút lá) luôn quan hệ Bộ tối ưu hóa chọn độ sâu trái có chi phí ước lượng thấp Hình đưa hai ví dụ độ sâu trái (chú ý Hình độ sâu trái) Với độ sâu trái, phải xem quan hệ thực phép nối vòng lặp lồng Mộtưu điểm độ sâu trái (hoặc độ sâu phải) chúng tuân theo kỹ thuật đường ống Ví dụ, xét độ sâu trái Hình giả sử thuật tốn nối phương pháp vịng lặp đơn; trường hợp này, trang đĩa chứa quan hệ ngồi dùng để dị tìm phù hợpở quan hệ Khi khối kết gồm tạo từ phép nối R1 R2 dùng để dị tìm R3 Tương tự, trang kết gồm tạo từ phép nối dùng để dị tìm R4 Một ưu điểm khác độ sâu trái (hoặc độ sâu phải) có quan hệ sở đóng vai trị số cácđầu vào phép nối cho phép tối ưu hóa dùng đường dẫn truy cập quan hệ mà hữu dụng thực phép nối Nếu việc thực cụ thể(materialization) dùng thay kỹ thuật đường ống kết phép nối thực lưu trữ quan hệ tạm thời Ý tưởng từ quan điểm tối ưu hóa xét theo khía cạnh thứ tự nối tìm thứ tự làm giảm kích thước kết tạm thời, kết tạm thời Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 55 Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu nàyđược sử dụng tốn tử ảnh hưởng đến chi phí thực tốn tửđó Đề tài Khoa học Cơng nghệ cấp Viện 2015 (mã số: V2015-15) 56 Nghiên cứu ứng dụng thuật tốn tối ưu hóa truy vấn sở liệu Chương - Ứng dụng tối ưu hóa truy vấn hệ thống TMAS 3.1 Tối ưu hóa hệ quản trị sở liệu MySQL Server Hiệu ứng dụng phụ thuộc vào nhiều yếu tố, có yếu tố quan trọng thời gian để máy chủ MySQL xử lý câu lệnh SQL Đôi thiết kế sở liệu yêu cầu truy vấn phức tạp làm cản trở tốc độ thực thi câu lệnh SQL Cách viết code câu lệnh SQL khiến máy chủ MySQL phải làm việc nhiều để xử lý truy vấn Do đó, viết code SQL theo số quy tắc giới thiệu giúp tối ưu câu truy vấn, tận dụng tốt tài nguyên máy chủ MySQL cải thiện hiệu suất 3.1.1 Nguyên tắc - Ghi rõ tên cột câu lệnh SELECT SELECT * FROM MyTable; Đây câu lệnh thường hay dùng theo thói quen mà thường hay mắc phải Việc sử dụng dấu (*) cho sở liệu biết bạn muốn trả tất cột từ bảng (hoặc bảng) khai báo mệnh đề FROM Đây khơng phải thói quen tốt bạn muốn tất cột trả ứng dụng Tốt bạn nên ghi rõ tên cột bảng sau: SELECT ID, Description, DateModified FROM MyTable; Việc khai rõ ràng tên cột câu lệnh SELECT mang lại nhiều lợi ích Thứ nhất, máy chủ MySQL trả liệu cần thiết cho ứng dụng đống liệu mà có nhiều thứ ứng dụng bạn không cần đến Bằng cách yêu cầu trả liệu cần thiết, bạn góp phần tối ưu hóa khối lượng cơng việc máy chủ SQL cần thực để thu thập tất cột thơng tin bạn u cầu Ngồi ra, nhờ khơng sử dụng dấu (*) nên bạn giảm thiểu lưu lượng truyền tải qua mạng (số byte) cần thiết để gửi liệu liên quan đến câu SELECT tới ứng dụng Trong trường hợp bạn dùng dấu (*) có thêm cột vào bảng, ứng dụng bạn bắt đầu tiếp nhận liệu cho cột mà không thay đổi mã nguồn ứng dụng Nếu ứng dụng bạn chờ đợi số lượng cột định trả về, bị lỗi có người bổ sung cột vào bảng tham chiếu Bằng việc Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 57 Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu khai báo rõ ràng tên cột câu lệnh SELECT, ứng dụng nhận số lượng cố định cột trả về, có người thêm cột vào bảng tham chiếu câu lệnh SELECT Nhờ vậy, bạn giúp ứng dụng tránh khỏi nguy tiềm tàng liên quan đến sở liệu xảy đến với bảng bạn tham chiếu tới câu lệnh SELECT 3.1.2 Nguyên tắc - Ghi rõ tên cột câu lệnh INSERT Cũng giống trên, bạn nên rõ tên cột bạn muốn chèn liệu vào câu lệnh INSERT Đừng viết câu lệnh INSERT sau: INSERT INTO MyTable VALUES ('A','B','C'); Khi bạn viết kiểu này, máy chủ MySQL đòi hỏi ba cột định nghĩa bảng MyTable, giá trị “A” chèn vào cột đầu tiên, “B” vào cột thứ hai, “C” vào cột cuối Nếu thêm cột vào bảng MyTable, ứng dụng bạn bị lỗi: Msg 213, Level 16, State 1, Line Column name or number of supplied values does not match table definition (Tên cột số lượng giá trị không khớp với bảng) Vì thế, thay viết câu lệnh INSERT trên, bạn nên viết sau: INSERT INTO MyTable(So1, So2, So3) VALUES ('A','B','C'); Bằng cách viết trên, thêm cột tên “So4” vào bảng MyTable, câu lệnh INSERT tiếp tục làm việc với điều kiện cột “So4” tạo với giá trị mặc định DEFAULT cho phép NULL 3.1.3 Nguyên tắc - Chỉ dùng DISTINCT cần Đặt từ khóa DISTINCT câu lệnh SELECT loại bỏ kết trùng lặp số kết trả câu truy vấn Nó khiến máy chủ MySQL phải thực thêm thao tác SORT để xếp liệu nhằm nhận biết loại bỏ trùng lặp Vì thế, bạn biết trước kết trả khơng trùng lặp khơng nên dùng từ khóa DISTINCT câu lệnh SQL Với việc sử dụng từ khóa DISTINCT câu Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 58 Nghiên cứu ứng dụng thuật tốn tối ưu hóa truy vấn sở liệu truy vấn, bạn yêu cầu máy chủ MySQL thực thao tác xếp vào loại bỏ kết trùng lặp Đây phần công việc phụ thêm máy chủ MySQL khơng có ý nghĩa tập hợp kết bạn bao gồm ghi độc 3.1.4 Nguyên tắc - Chỉ dùng UNION cần Cũng giống trường hợp từ khóa DISTINCT, tốn tử UNION đòi hỏi thêm thao tác SORT để máy chủ MySQL loại bỏ kết trùng lặp Nếu bạn biết trước danh sách kết trả khơng có kết giống thao tác xếp mà máy chủ MySQL phải thực trở nên không cần thiết Bởi bạn cần dùng toán tử UNION để nối hai tập hợp ghi với nhau, ghi độc khơng trùng lặp, tốt bạn nên dùng tốn tử UNION ALL Tốn tử UNION ALL khơng loại bỏ ghi trùng lặp giảm nhẹ phần cơng việc cho máy chủ MySQL q trình xử lý thực thao tác xếp Giảm bớt công việc cho máy chủ MySQL đồng nghĩa với việc thao tác xử lý thực nhanh 3.1.5 Nguyên tắc - Sử dụng EXPLAIN để phân tích truy vấn Đây có lẽ khuyến nghị bạn cố gắng tối ưu hóa truy vấn MySQL EXPLAIN lệnh hữu ích MySQL, cung cấp số chi tiết tuyệt vời truy vấn chạy, số sử dụng, hàng cần kiểm tra thông qua, bảng tạm thời điều khó chịu khác mà bạn muốn tránh EXPLAIN câu lệnh giúp bạn tránh khỏi câu truy vấn tồi Xét câu truy vấn sau: mysql>SELECT * FROM Country, (SELECT * FROM City WHERE Population >1000000) AS C1 WHERE Country.Code = C1.CountryCode; explain câu lệnh có kết ví dụ sau: + + -+ + + -+ -+ -+ + -+ -+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | + + -+ + + -+ -+ -+ + -+ -+ | | PRIMARY | | ALL | NULL | NULL | NULL | NULL | 237 | | Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 59 Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu | | PRIMARY | Country | eq_ref | PRIMARY | PRIMARY | | C1.CountryCode | | | | | DERIVED | City | ALL | NULL | NULL | NULL | NULL | 4079 | Using where | + + -+ + + -+ -+ -+ + -+ -+ rows inset (0.00 sec) Từ ví dụ bạn thấy explain cho vài nhận xét sau: Một query to "break" thành nhiều query nhỏ Với query nhỏ đó, có nhiều thơng số để biết query nhỏ đo thuộc loại nào, lấy từ index Chúng ta vào chi tiết thông số Các thơng số EXPLAIN: • select_type Về bạn hiểu tham số "kiểu" query Trong trường hợp Join query Đầu tiên nói khái niệm join query gọi Nested-Loop Join Nested-Loop Join có nghĩa là mysql lấy data match điều kiện bảng 1, sau với data lấy data match điều kiện bảng 2, sau JOIN vào kết cuối Trong trường hợp query join query, select_type SIMPLE bạn thấy hình Do bạn đừng nhầm trường hợp với nghĩa query thuộc loại "đơn giản" Việc select_type SIMPLE thể query explain xử lý Nested-Loop Join Trong trường hợp "subquery" "subquery" tức kiểu select lại có select khác vậy, giống ví dụ Khi select_type có loại sau: PRIMARY mà query field "nằm ngoài" subquery SUBQUERY query "đầu tiên" nằm subquery, không phụ thuộc vào query khác Query execute lần đầu tiên, sau kết cache lại DEPENDENT SUBQUERY query mà phụ thuộc vào query nằm ngồi Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 60 Nghiên cứu ứng dụng thuật tốn tối ưu hóa truy vấn sở liệu UNCACHEABLE SUBQUERY query không cache DERIVED query nằm bên FROM Trong trường hợp "union" Khi mà query union có kiểu select_type sau: PRIMARY bảng fetch union UNION bảng thứ fetch UNION RESULT kết union DEPEDENT UNION mà subquery có union, subquery thuộc loại DEPENDENT SUBQUERY UNCACHEABLE UNION mà uncacheable subquery có chứa union • table: Đơn giản tên table mà query sử dụng • type Biến cho thông tin quan trọng, "cách" truy cập vào table sử dụng query Tuỳ vào cách truy cậpchúng ta có cách truy cập"nhanh", cách "truy cập" chậm Biến biến để giúp tuning index cho database Chúng ta vào chi tiết: const Khi mà table truy cậpsử dụng PRIMARY KEY, sử dụng index field mà giá trị field UNIQUE Khi mà type const có tốc độ truy cậpvào table "nhanh nhất" ! eq_ref giống const mà field sử dụng không đứng riêng mà nằm câu lệnh JOIN ref Khi mà field tìm kiếm có dán index , nhiên field khơng phải UNIQUE, field sử dụng phép so sánh Where = range Khi mà field tìm kiếm có dán index, sử dụng phép tìm theo range Where In Where > hay Where < Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 61 Nghiên cứu ứng dụng thuật tốn tối ưu hóa truy vấn sở liệu index có dán index mà để tìm kết mysql bắt buộc phải scan tồn field, mà chậm ALL : Đây mà field khơng dán index, mà lại cịn phải scan tồn field, nơi mà bạn bắt buộc phải tuning nguyên nhân gây tốc độ truy vấn chậm • possible_keys: List tất key mà optimizer mysql sử dụng index chúng để tìm kiếm • key: Key thức optimizer sử dụng để làm index để tìm kiếm • ref: Biến thể field mà key đêm so sánh với mà mysql tiến hành tìm kiếm Trong trường hợp query JOIN giá trị key bảng tương ứng mà join với bảng Giả sử có ví dụ đây: mysql> EXPLAIN SELECT * FROM Country,City WHERE Country.Code=City.CountryCode AND Country.Name LIKE 'A%'; + + -+ -+ + -+ -+ -+ -+ + -+ | id | select_type | table | rows | Extra | type | possible_keys | key | key_len | ref | + + -+ -+ + -+ -+ -+ -+ + -+ | | SIMPLE | City | ALL | NULL | 4079 | | | | Country | eq_ref | PRIMARY | SIMPLE world.City.CountryCode | | NULL | NULL | NULL | PRIMARY | | | Using where | + + -+ -+ + -+ -+ -+ -+ + -+ rows inset (0.00 sec) Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 62 Nghiên cứu ứng dụng thuật tốn tối ưu hóa truy vấn sở liệu Trong trường hợp ref CountryCode field đếm để so sánh với CountryCode • rows Đây thơng số quan trọng Nó thể số dòng mà mysql "dự định" fetch từ bảng query Như ví dụ query lấy 4079 dòng, query thứ lấy dòng từ 4079 dịng Có điểm ý query thuộc type "DERIVED" tức subquery nằm FROM statement, khơng execute query mysql khơng thể "đốn" số dịng cần lấy Do EXPLAIN tốn thời gian subquery nặng • Extra Đây thông số quan trọng để tuning mysql query Biến thể optimizer thực chiến lược để thực thi query Chỉ cần nhìn qua extra bạn phần "đốn được" chuyện xẩy đằng sau query Biến có loại sau: Using where Loại có tần xuất xuất nhiều Khi loại xuất tức query có định điều kiện "Where", nhiên để match điều kiện định khơng thể nhìn vào index mà phải nhìn vào thơng tin khác (do mà tất nhiên tốc độ xử lý chậm mà cần nhìn vào index có thơng tin) Using index Khi mà cần nhìn vào index lấy thơng tin cần thiết Using filesort Khi query có order by chẳng hạn thơng tin lấy cần phải sort Using filesort nói lên điều (filesort cịn nói lên vài điều khơng nằm scope nên tạm bỏ qua) Using temporary Khi mà query phải sort kết JOIN , query có sử dụng distinct mysql phải tạo "bảng tạm" để thực việc Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 63 Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu Using index for group by Khi query có MIN() , MAX(), GROUPBY() mà cần nhìn vào index tìm thơng tin cần thiết Range checked for each record (index map: N) Khi query có JOIN mà range index_merge sử dụng Not exists Khi query có LEFT JOIN, field bảng bên phải LEFT JOIN lại qui định NOT NULL 3.1.6 Nguyên tắc - Sử dụng INDEX MySQL Một sở liệu với mục cấu trúc liệu mà cải thiện tốc độ hoạt động bảng Các mục tạo sử dụng nhiều cột, cung cấp sở cho việc tăng nhanh trình tìm kiếm ngẫu nhiên xếp thứ tự truy cập tới ghi cách hiệu Trong tạo mục, bạn nên cân nhắc xem cột sử dụng để tạo truy vấn SQL tạo nhiều mục cột Thực tế, mục kiểu bảng, mà giữ trường Primary Key trường index trỏ tới ghi bên bảng thực Người sử dụng thấy mục này, chúng sử dụng để tăng tốc truy vấn sử dụng Database Search Engine để định vị ghi cách nhanh Các lệnh INSERT UPDATE tốn nhiều thời gian bảng có mục lệnh SELECT trở nên nhanh bảng Lý vì, chèn cập nhật, sở liệu phải cần chèn cập nhật giá trị mục • Simple Index Unique Index MySQL Bạn tạo Unique Index bảng Một Unique Index nghĩa hai hàng khơng thể có giá trị mục Dưới cú pháp để tạo mục bảng CREATE UNIQUE INDEX ten_chi_muc ON ten_bang ( cot1, cot2, ); Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 64 Nghiên cứu ứng dụng thuật toán tối ưu hóa truy vấn sở liệu Bạn sử dụng nhiều cột để tạo mục Ví dụ, tạo mục cột ten bảng sinhvienk60 sau: CREATE UNIQUE INDEX tenchimuc ON sinhvienk60 (ten) Bạn tạo Simple Index bảng Đơn giản, bạn cần bỏ qua từ khóa UNIQUE từ truy vấn để tạo Simple Index Simple Index cho phép tồn giá trị bảng Nếu bạn muốn lập mục giá trị cột theo thứ tự giảm dần, bạn thêm từ DESC sau tên cột CREATE UNIQUE INDEX tenchimuc ON sinhvienk60 (ten DESC) 3.2 Chương trình ứng dụng thử nghiệm Xây dựng chương trình thử nghiệm dựa sở liệu quản lý đào tạo khoa Từ Xa Viện đại học Mở Hà Nội Hệ thống quản lý đào tạo khoa Từ Xa triển khai đạt số kết định Nhằm tối ưu hoạt động hệ thống tăng tốc độ truy xuất sở liệu, nhóm tác giả thử nghiệm số thuật tốn tối ưu Giao diện chương trình Hình 3.1 Chương trình chia thành hai mục chính, mục thứ thực truy vấn chưa thực tối ưu hóa Kết q trình thực hiện, hệ thống trả thời gian thực câu truy vấn tổng số ghi đạt Ở mục thứ hai chương trình, thực truy vấn áp dụng số phương pháp, thuật toán tối ưu Kết trình thực hiện, hệ thống trả thời gian thực truy vấn tổng số ghi đạt Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 65 Nghiên cứu ứng dụng thuật tốn tối ưu hóa truy vấn sở liệu Hình 3.1 Giao diện chương trình Nhóm tác giả thực so sánh thời gian thực truy vấn, nhận thấy câu lệnh tối ưu, thời gian thực nhanh hơn, giảm chi phí tiêu hao hệ thống Hình 3.2 Hình 3.2 So sánh thời gian thực truy vấn tối ưu Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 66 Nghiên cứu ứng dụng thuật tốn tối ưu hóa truy vấn sở liệu Kết chạy demo câu truy vấn sử dụng thuật tốn Heuristics Hình 3.3 Hình 3.4 Hình 3.3 Kết chạy demo câu truy vấn sử dụng thuật tốn Heuristics Hình 3.4 Kết chạy demo câu truy vấn sử dụng thuật tốn Heuristics Đề tài Khoa học Cơng nghệ cấp Viện 2015 (mã số: V2015-15) 67 Nghiên cứu ứng dụng thuật tốn tối ưu hóa truy vấn sở liệu PHẦN III - KẾT LUẬN VÀ KIẾN NGHỊ III.1 Kết luận Nghiên cứu sở liệu phân tán hướng đắn, phù hợp với tổ chức lớn, có nhiều chi nhánh Việc ứng dụng sở liệu tối ưu giải tốt tốn xử lý nhanh có u cầu truy xuất cục Hệ thống sở liệu đào tạo từ xa hệ thống sở liệu phức tạp hơn, đòi hỏi việc tổ chức vật lý, mơ hình mạng phức tạp Việc tìm hiểu tối ưu hóa truy vấn có ý nghĩa quan trọng định đến hiệu hệ thống Những kết luận văn - Trình bày nguyên lý chung để tối ưu hóa bao gồm: Các chiến lược tối ưu tổng quát, kỹ thuật tối ưu hóa bản,các biến đổi đại số, Các phép nối, nối nửa, phân rã câu hỏi thành câu hỏi con, Đánh giá câu hỏi định vị liệu tối ưu hóa câu hỏi phân tán Cài đặt thử nghiệm thuật tốn tối ưu hóa theo thuật toán Heuristics số phương pháp tối ưu truy vấn khác III.2 Kiến nghị Với thời gian có hạn đề tài dừng mức độ tiếp cận tối ưu sở liệu, hướng phát triển tới nghiên cứu cài đặt sâu thuật toán Heuristics, bao gồm kết nối lồng nhau, cài đặt thuật tốn phức tạp Đề tài Khoa học Cơng nghệ cấp Viện 2015 (mã số: V2015-15) 68 Nghiên cứu ứng dụng thuật tốn tối ưu hóa truy vấn sở liệu TÀI LIỆU THAM KHẢO Tiếng Việt: [1] Nguyễn Thị Vân Anh, Tìm hiểu số vấn đề tối ưu hóa truy vấn, luận văn thạc sĩ [2] Đoàn Văn Ban, Lê Mạnh Thạnh Hồng Bảo Hùng, "Sự tương đương biểu diễn ngơn ngữ truy vấn OQL đại số đối tượng", tạp chí tin học điều khiển học, 20(3), (2004), 257-269 [3] Nguyễn Văn Dũng , Tối ưu hóa truy vấn sở liệu phân tán, luận văn thạc sĩ, Đại học Đà Nẵng [4].Đinh Thị Lan Phương, Tối ưu hóa truy vấn sở liệu quan hệ sở liệu phân tán phương pháp Heuristic, luận văn thạc sĩ, Đại học Công nghệ Tiếng Anh: [1] Bierman G.M and Trigoni A,Towards A Formal Type System For ODMG OQL, Technical Report 497, University of Cambridge, Computer Laboratory, 2000 [2] Cattel R.G.G., Barry D.K,The Object Database Standard: ODMG 3.0, Morgan Kaufmann Publishers, 2000 Đề tài Khoa học Công nghệ cấp Viện 2015 (mã số: V2015-15) 69 ... ứng dụng Hệ thống hỗ trợ Quản lý đào tạo Từ Xa Viện Đại học Mở Hà Nội I.3 Đối tượng phạm vi nghiên cứu Đối tượng nghiên cứu phương pháp truy vấn Phạm vi nghiên cứu kỹ thuật đồng tối ưu truy vấn. .. vấn sở liệu I.4 Phương pháp nghiên cứu Nghiên cứu lý thuyết khai phá liệu, tối ưu hóa truy vấn, ứng dụng phương pháp vào thiết kế xây dựng hệ thống hỗ trợ quản lý đào tạo Từ Xa Viện Đại học Mở Hà. .. cứu ứng dụng thuật tốn tối ưu hóa truy vấn sở liệu Chương -Các thuật tốn tối ưu hóa truy vấn 2.1 Tối ưu hóa truy vấn dùng thuật tốn Heuristics Tối ưu hóa truy vấn dùng thuật tốn Heuristics áp dụng