Số hóa bởi Trung tâm Học 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 t
Trang 1ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
Trang 2Số hóa bởi Trung tâm Học liệu – ĐHTN ht t p : / / www lrc.tnu e du v n
Trang 3ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
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
Trang 4Số hóa bởi Trung tâm Học liệu – ĐHTN ht t p : / / www lrc.tnu e du v n
Trang 5ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
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 –
Số hóa bởi Trung tâm Học liệu –
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
THÔNG
i
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 aicô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 đàotạ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ànthành luận văn này
Thái Nguyên, tháng 12 năm 2015
Tác giả
Chanthiva MANIVONG
Trang 7Để 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, đặcbiệ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ạitrườ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ềuthờ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ànthà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áiNguyê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âmhuyế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ốtnghiệ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 ht t p : / / www lrc.tnu e du v n
Số hóa bởi Trung tâm Học liệu –
ĐHTN ht t p : / / www lrc.tnu e du v n
33
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
Trang 9Số hóa bởi Trung tâm Học liệu –
Trang 10Số hóa bởi Trung tâm Học liệu –
Số hóa bởi Trung tâm Học liệu –
55
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 12Số hóa bởi Trung tâm Học 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 13viii
Số hóa bởi Trung tâm Học liệu –
Số hóa bởi Trung tâm Học liệu –
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 14Số hóa bởi Trung tâm Học liệu –
Số hóa bởi Trung tâm Học liệu –
8
viii
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 ngh i ệ 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 15LỜ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ệukhá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ạnchế Để 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âulệnh đơn lẻ đảm bảo các yêu cầu sau đó mới có thể áp dụng cho một chươngtrì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 đượcnghiê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ướckhi 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ấnSQL, nghiên cứu phương pháp tối ưu câu SQL để nâng cao hiệu quả của chươngtrì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 SQLChươ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ộtchương trình cụ thể để có thể tối ưu cho nhiều đoạn mã tương tự
Trang 16Số hóa bởi Trung tâm Học liệu –
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ìnhkinh doanh đảm bảo hiệu quả Những thông tin đó gọi là cơ sở dữ liệu kinhdoanh Trước khi có công nghệ thông tin hỗ trợ, các nhà doanh nghiệp phải lưutrữ, 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 tolớn vào hiệu quả kinh doanh của doanh nghiệp Những thông tin phục vụ kinhdoanh có những biến đổi quann trọng với những cấu trúc phức tạp, tinh vi, khốilượ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ôngtin đế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ạngphong 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ôngviệc sinh ra lợi nhuận Để thực hiện chức năng kinh doanh hiệu quả doanhnghiệp cần xử lý các thông tin liên quan đến quá trình kinh doanh Nếu tổ chứctốt thông tin việc kinh doanh của doanh nghiệp sẽ có hiệu quả, ổn định và giúpdoanh 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 doanhnghiệ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ệunhất là trường hợp doanh nghiệp bắt đầu hoạt động Nó mô tả đầy đủ chính xácthông tin cần cho doanh nghiệp, tránh được sự nhầm lẫn thiếu hụt thông tin có
Trang 17Số hóa bởi Trung tâm Học liệu –
Trang 18Số hóa bởi Trung tâm Học liệu –
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 kinhdoanh 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âydự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 khithự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ùnglặ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ệunà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ưutrữ 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ựngnên các Hệ quản trị CSDL là công cụ để thực thi cài đặt CSDL và cung cấp cácthao 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
Trang 19Số hóa bởi Trung tâm Học liệu –
Số hóa bởi Trung tâm Học liệu –
55
+ Đả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 20Số hóa bởi Trung tâm Học liệu –
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 để truyvấ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ácphé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 đượcIBM 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ácchữ 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ộttậ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ếtbằng ngôn ngữ lập trình bậc cao khác (như C#, Java, ), hoặc viết các chươngtrì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 21Số hóa bởi Trung tâm Học liệu –
Số hóa bởi Trung tâm Học liệu –
77
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 22Số hóa bởi Trung tâm Học 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ốiSELECT - FROM - WHERE
Mệnh đề SELECT nghĩa là chọn các thuộc tính ra, hay còn gọi là thuộctí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ácthuộ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ềukiệ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 - wherecò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
Trang 23Số hóa bởi Trung tâm Học liệu –
Trang 24Số hóa bởi Trung tâm Học liệu –
ĐHTN ht t p : / / www lrc.tnu e du v n
Số hóa bởi Trung tâm Học liệu –
ĐHTN ht t p : / / www lrc.tnu e du v n
10
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ứcWHERE [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.
Trang 25Số hóa bởi Trung tâm Học liệu –
Số hóa bởi Trung tâm Học liệu –
11
SELECT DISTINCT PName FROM SP
Tìm kiếm với điều kiện đơn giản
Trang 26Số hóa bởi Trung tâm Học liệu –
Trong SQL- các phép so sánh được sử dụng bao gồm >, <, >= , <=, = và
<> Các phép tính trên dùng cho mọi loại dữ liệu
Tìm kiếm có xử lý xâu ký tự
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 để thaythế 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
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
Trang 27Số hóa bởi Trung tâm Học liệu –
Trang 28Số hóa bởi Trung tâm Học liệu –
Số hóa bởi Trung tâm Học liệu –
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 29Số hóa bởi Trung tâm Học liệu –
Trang 30Số hóa bởi Trung tâm Học liệu –
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à đủ
Ví dụ trên có thể viết:
SELECT PNAME, P#
FROM P
Trang 31Số hóa bởi Trung tâm Học liệu –
Trang 32Số hóa bởi Trung tâm Học liệu – ĐHTN ht t p : / / www lrc.tnu e du v n
Trang 33Tì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épkế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 đó.
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 35Số hóa bởi Trung tâm Học liệu –
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âuvấ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ướcphâ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 Tuynhiê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éptoá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ênnghĩ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
Trang 36Số hóa bởi Trung tâm Học liệu –
Trang 37Số hóa bởi Trung tâm Học liệu –
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ảicủ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ấntin 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ờigian 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 tracác bản ghi trùng lặp, trong khi đó lệnh UNION luôn luôn kiểm tra các bản ghixem 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 khithự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ệcnà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
Trang 38Số hóa bởi Trung tâm Học liệu –
Trang 39Số hóa bởi Trung tâm Học liệu –
ĐHTN ht t p : / / www lrc.tnu e du v n
Số hóa bởi Trung tâm Học liệu –
ĐHTN ht t p : / / www lrc.tnu e du v n
18
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ênbả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 racò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ụngtrong 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) = (SELECTMAX (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ệntốc độ bớt thao tác chuyển đổi kiểu dữ liệu
Ví dụ:
Trang 40Số hóa bởi Trung tâm Học liệu –