Để nhận biết đƣợc sự thay đổi về tốc độ thực hiện câu lệnh truy vấn SQL trƣớc và sau khi tiền tối ƣu, cần phải có lƣợng dữ liệu đủ lớn. Chúng tôi xây dựng công cụ tự động chèn dữ liệu vào Cơ sở dữ liệu.
Hình 3.2: Giao diện phần chèn dữ liệu tự động
Sau đó, chúng tôi thử nghiệm với 2 câu lệnh truy vấn sau:
Câu lệnh truy vấn 1: Lấy danh sách điểm của tất cả các sinh viên đã học môn Toán cao cấp 1 bao gồm cả lần học đi và lần học lại.
Câu lệnh đƣợc thể hiện nhƣ sau: p: SELECT tblSinhVien.MaSV, tblSinhVien.TenSV,
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/
tblDiem.DiemThi
FROM tblDiem, tblSinhVien,
tblMonHoc
WHERE tblSinhVien.MaSV = tblDiem.MaSV
and tblDiem.MaMonHoc = tblMonHoc.MaMonHoc and tblMonHoc.TenMonHoc = N'Toán cao cấp 1'
Hình 3.3: Thực hiện truy vấn lấy danh sách điểm sinh viên
Theo luật phân rã câu vấn tin p đƣợc thay bởi P1: SELECT MaMonHoc
FROM tblMonHoc INTO TGMonHoc WHERE TenMonHoc = N'Toán cao cấp 1'
Là câu vấn tin đơn quan hệ TGMonHoc. Kết quả trong TG1 chỉ có „ToanCC‟
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/ P2: SELECT tblSinhVien.MaSV,
tblSinhVien.TenSV,
tblDiem.DiemThuongXuyen,
tblDiem.DiemThi
FROM tblDiem, tblSinhVien,TGMonHoc WHERE tblSinhVien.MaSV = tblDiem.MaSV
and tblDiem.MaMonHoc = TGMonHoc.MaMonHoc
Là câu lệnh đa quan hệ, P2 đƣợc phân rã thành P21 và P22: P21: SELECT tblDiem.MaSV,tblDiem.DiemThuongXuyen,
tblDiem.DiemThi INTO TGDiem FROM tblDiem, TGMonHoc
WHERE tblDiem.MaMonHoc = TGMonHoc.MaMonHoc P22: SELECT tblSinhVien.MaSV, tblSinhVien.TenSV,
TGDiem.DiemThi, TGDiem.DiemThuongXuyen
FROM tblSinhVien, TGDiem
WHERE TGDiem.MaSV = tblSinhVien.MaSV
Nhƣ vậy câu vấn tin p đƣợc phân rã thành chuỗi câu vấn tin p1-> p21->p22. Câu vấn tin đơn quan hệ p1 có thể dùng thể vấn tin ORQOP (One Relation Query Optimization Processor). Còn câu lệnh p21, p22 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 phân rã của thuật toán. Theo phép thế bộ của thuật toán, p22 đƣợc thay bởi tập 3 câu lệnh SQL một quan hệ:
q1: SELECT tblSinhVien.MaSV, tblSinhVien.TenSV, '9' as DiemThuongXuyen, 9' as DiemThi
FROM tblSinhVien
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/ q2: SELECT tblSinhVien.MaSV, tblSinhVien.TenSV,
'10' as DiemThuongXuyen, '10' as DiemThi FROM tblSinhVien
WHERE tblSinhVien.MaSV = 'SV001'
q3: SELECT tblSinhVien.MaSV, tblSinhVien.TenSV, '10' as DiemThuongXuyen, '10' as DiemThi FROM tblSinhVien
WHERE tblSinhVien.MaSV = 'SV002'
Kết quả truy vấn cho ta danh sách điểm những sinh viên đã học môn Toán cao cấp 1 nhƣ sau:
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
Và thời gian thực hiện câu lệnh truy vấn là: -Câu lệnh chƣa tối ƣu: 0.2157369
-Câu lệnh tối ƣu: 0.1155684
Câu lệnh truy vấn 2: In thông tin lý lịch của một sinh viên có mã sinh viên SV001
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/ P: SELECT tblThanhVienGiaDinh.HoTen, tblThanhVienGiaDinh.NgheNghiep, tblThanhVienGiaDinh.SDT, tblThanhVienGiaDinh.Tuoi, tblQuanHe.TenQuanHe
FROM tblQuanHe, tblGiaDinh, tblThanhVienGiaDinh WHERE tblGiaDinh.MaSV = 'SV001'
and tblQuanHe.MaQuanHe =
tblThanhVienGiaDinh.MaQuanHe
and tblGiaDinh.MaThanhVien =
tblThanhVienGiaDinh.MaThanhVien
Hình 3.5 Thực hiện truy vấn lấy thông tin sinh viên
Câu lệnh p đƣợc phân rã nhƣ sau: P1: SELECT MaThanhVien FROM tblGiaDinh
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/ P2: SELECT tblThanhVienGiaDinh.HoTen, tblThanhVienGiaDinh.NgheNghiep, tblThanhVienGiaDinh.SDT, tblThanhVienGiaDinh.Tuoi, tblQuanHe.TenQuanHe FROM tblThanhVienGiaDinh,tblQuanHe,TGGiaDinh WHERE tblQuanHe.MaQuanHe = tblThanhVienGiaDinh.MaQuanHe And tblThanhVienGiaDinh.MaThanhVien = TGGiaDinh.MaThanhVien
P2 là câu lệnh đa quan hệ, đƣợc phân rã tiếp thành p21 và p22 nhƣ sau: P21: SELECT tblThanhVienGiaDinh.MaQuanHe,
tblThanhVienGiaDinh.HoTen, tblThanhVienGiaDinh.NgheNghiep,
tblThanhVienGiaDinh.SDT,
tblThanhVienGiaDinh.Tuoi
FROM tblThanhVienGiaDinh, TGGiaDinh INTO TGThanhVienGiaDinh WHERE tblThanhVienGiaDinh.MaThanhVien = TGGiaDinh.MaThanhVien P22: SELECT tblQuanHe.TenQuanHe, TGThanhVienGiaDinh.HoTen, TGThanhVienGiaDinh.NgheNghiep, TGThanhVienGiaDinh.SDT, TGThanhVienGiaDinh.Tuoi
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/ WHERE TGThanhVienGiaDinh.MaQuanHe =
tblQuanHe.MaQuanHe
Nhƣ vậy câu vấn tin p đƣợc phân rã thành chuỗi câu vấn tin p1 -> p21->p22. Câu vấn tin đơn quan hệ p1 có thể dùng thể vấn tin ORQOP (One Relation Query Optimization Processor). Còn câu lênh p21, p22 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 phân rã của thuật toán. Theo phép thế bộ của thuật toán, p22 đƣợc thay bởi tập 2 câu lệnh SQL một quan hệ:
Q1: SELECT N'Nguyễn Văn A' as HoTen,
tblQuanHe.TenQuanHe,
N'Giáo viên' as NgheNghiep, '123456' as SDT,
'40' as Tuoi
FROM tblQuanHe
WHERE tblQuanHe.MaQuanHe = 'Bo' Q2: SELECT N'Nguyễn Thị B' as HoTen,
tblQuanHe.TenQuanHe, N'Kỹ sƣ' as NgheNghiep, '123456' as SDT, '35' as Tuoi
FROM tblQuanHe WHERE tblQuanHe.MaQuanHe = 'Me' Và kết quả truy vấn của câu lệnh truy vấn trên là:
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
Thời gian thực hiện trƣớc tối ƣu: 0.1989044 Thời gian thực hiện sau khi tối ƣu: 0.09933
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/
KẾT LUẬN
Trong các tài liệu nghiên cứu và ứng dụng các lệnh SQLs, AQLs, OTs thì SQL thƣờng đƣợc chỉ ra trƣớc. Từ đó bằng phƣơng pháp tối ƣu hóa thủ công, thậm chí có thể tự động tối ƣu hóa bằng các thuật toán đã cho tại chƣơng 2 mục 2.3. Nhƣng việc tìm kiếm thủ công trong chƣơng trình nguồn, viết lại câu vấn tin SQL sẽ mất không ít thời gian và cũng không tránh đƣợc các sai sót. Phƣơng pháp đã đƣợc trình bày trong luận văn này nhằm khắc phục các nhƣợc điểm trên, đồng thời sẽ hỗ trợ đắc lực cho hƣớng nghiên cứu và ứng dụng thuật toán song song, lập trình song song, xử lí song song và phân tán,…
HƢỚNG PHÁT TRIỂN
Nghiên cứu này có thể tiếp tục phát triển tiếp theo nhƣ sau:
Có thể thay phƣơng pháp tối ƣu tĩnh bằng phƣơng pháp tối ƣu động, nghĩa là tìm các chiến lƣợc truy nhập/xuất đến các quan hệ, sau đó tìm ra chiến lƣợc tối ƣu tiền định cho chƣơng trình nguồn.
Các phƣơng pháp này có thể đƣợc mở rộng cho trƣờng hợp CSDL phân tán và CSDL hƣớng đối tƣợng.
Xây dựng chƣơng trình tự động tìm kiếm các câu lệnh SQL đa quan hệ trong chƣơng trình nguồn và tự động tối ƣu các câu lệnh này bằng phƣơng pháp phân rã và thay thế đã trình bày trong nghiên cứu.
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/
TÀI LIỆU THAM KHẢO
[1] Lê Huy Thập, Nguyễn Văn Sỹ, "Tìm câu SQL từ chƣơng trình nguồn, chuyển sang AQL và vẽ cây toán tử", Tạp chí khoa học ISSN 1859-2355,
Tập N19/2012, Số 19, 213 – 221, 2012.
[2] Lê Huy Thập, Nguyễn Thành Trung, Nguyễn Văn Lƣợng, "Tìm kiếm văn bản dựa vào cụm từ và chuyển vào cơ sở dữ liệu", Tạp chí khoa học ISSN 1859-2355, Tập N25/2013, Số 25, 131 – 139, 2013.
[3] Lê Huy Thập, Giáo trình kỹ thuật lập trình Tập 1, NXB KHOA HỌC TỰ NHIÊN VÀ CÔNG NGHỆ, 300p, 2008.
[4] Đỗ Xuân Lôi, Cấu trúc dữ liệu và Giải thuật, NXB Khoa học và kỹ thuật. [5] M.Tamer Ozsu, Patrick Valduriez. Nguyên lý các hệ cơ sở dữ liệu phân
tán. Trần Đức Quang biên dịch. NXB Thống kê, 1999.
[6] Robert Sedgewick, Cẩm nang thuật toán Vol.1 and Vol.2. NXB Khoa học và Kỹ thuật, 2001.
[7] Ellis Horowitz, Sartaj Sahani, Fundamentals of data structures, Computer Science Press INC, 1976.
[8] A. V. Aho, J.E. Hopcroft, J.D. Ulmann, Data Structures and algorithms, Ađition Wesley – 1983.
[9] S.B. Yao, Optimization of query evalution algorithms, ACM Trans. On Database systems 4:2 pp 133-155, 1979.
[10]C. Zaniolo and M.A. Melkanoff, On the design of relational database syschema ACM Trans. On Database systems 6:1 pp 1-47, 1984.
[11]M.M. Zloof, Query – by – example: a database language, IBM System J 16:4, pp 324-343, 1977.