Một phương án thực thi câu hỏi xác định một dãy các bước cho việc định giá câu hỏi,trong đó mỗi bước ứng với một phép toán của đại số quan hệ cùng với chú giải về phươngpháp được dùng để
Trang 1CHƯƠNG 6 XỬ LÝ VÀ TỐI ƯU CÂU TRUY VẤN
1 Quá trình xử lý và tối ưu câu truy vấn.
Khi nhận được một câu hỏi của người dùng, bộ xử lí câu hỏi trước hết kiểm tra xemcâu hỏi có được viết đúng cú pháp hay không, các quan hệ và các thuộc tính trong câu hỏi
có trong CSDL hay không Tiếp đó, nếu câu hỏi được chấp nhận, một phương án thực thi(execution plan) cho câu hỏi được phát sinh
Một phương án thực thi câu hỏi xác định một dãy các bước cho việc định giá câu hỏi,trong đó mỗi bước ứng với một phép toán của đại số quan hệ cùng với chú giải về phươngpháp được dùng để định giá phép toán đó Chẳng hạn, phép kết nối có thể được định giábằng các phương pháp lặp lồng, sắp xếp trộn, kết nối băm…
Mục đích của tối ưu hóa câu hỏi là tìm một phương án thực thi trong số tất cả cácphương án tương đương (theo nghĩa luôn cho cùng một kết quả), có thể có, được định giávới chi phí nhỏ nhất Trong hệ CSDL tập trung, chi phí cho việc định giá một câu hỏi làtổng của chi phí nhỏ nhất Trong hệ CSDL tập trung, chi phí cho việc định giá một câu hỏi
là tổng của chi phí I/O và chi phí CPU Chi phí I/O (Vào/ra) do việc truyền dữ liệu giữa bộnhớ chính và bộ nhớ thứ cấp (thường là đĩa từ) vì trong phần lớn các ứng dụng, dữ liệuthường quá lớn và không thể chứa hết trong bộ nhớ chính Với phần lớn các thao tácCSDL, chi phí I/O là chi phí có tính chi phối Để giảm chi phí I/O thường phải sử dụng cáccấu trúc dữ liệu đặc biệt, như các cây B+ chẳng hạn
Hình 1 dưới đây chỉ rõ các bước khác nhau của việc xử lí một câu hỏi được viếttrong một ngôn ngữ hỏi bậc cao, chẳng hạn SQL
Trang 2Hình 1
SQL Query
Parse query
Select logical query plan
Select physical plan
Execute plan
Query expression tree
Logical query plan tree
Physical query plan tree
Answer Parse tree
Logical query plan
Improve logical query plan
Logical query plan + sizes
{P1, P2, … }
{(P1, C1), (P2,C2) … }
Pi statistic
s
Trang 3Nói chung, số các phương án thực thi tương đương đối với một câu hỏi cho trước làrất lớn và phụ thuộc vào số m các phép toán (thao tác) trong câu hỏi và số k các phươngpháp khác nhau có thể được dùng để định giá mỗi một phép toán đó Khi đó, số cácphương án thực thi có thể lên tới (m!).k.m Tập tất cả các phương án thực thi tương đương
là không gian tìm kiếm cho tối ưu hóa câu hỏi
Vì vậy, bài toán tìm phương án thực thi tối ưu (tốt nhất) là một bài toán rất khó, tốnrất nhiều thời gian, đòi hỏi phải biết thông tin về các tệp được cài đặt ra sao, thậm chí cầnbiết cả nội dung của các tệp Đó là những thông tin thường không có sẵn đầy đủ trong thưmục của hệ quản trị cơ sở dữ liệu (hệ QTCSDL)
Do đó, tối ưu hóa câu hỏi trong nhiều trường hợp được hiểu là tìm một phương ánthực thi câu hỏi tương đối hiệu quả, gần với tối ưu
Xét ví dụ sau, cho hai lược đồ quan hệ R(AB) và S(CD) Giả sử ta có yêu cầu sau:
“Đưa ra thuộc tính A của các bộ thoả mãn điều kiện B=C và D=100”
Câu hỏi được viết dưới dạng ngôn ngữ đại số quan hệ như sau:
A(B=C and D=100(RS))Nếu đưa phép chọn D=100 vào bên trong phép tích Đề - các, sẽ được:
A(B=C(RD=100(S)))
và sau đó chuyển phép chọn B=C của tích Đề - các thành phép kết nối bằng sẽ được:
)((R D 100 S
bộ nhớ thứ cấp như băng đĩa từ)
Rõ ràng phép tính cuối cùng đỡ tốn kém thời gian hơn rất nhiều Cụ thể chỉ chọn trênquan hệ S những bộ có giá trị D100 thì số bộ lấy ra sẽ ít hơn toàn bộ số bộ của cả quạn
hệ S Số bộ được chọn ra xong từ S mới đem kết nối với quan hệ trên R Phép kết nối nàychỉ chọn ra bộ nào thuộc R mà có giá trị tại B bằng bộ có giá trị tại C mới được lấy ra Nhưvậy chi phí thực hiện sẽ tốt hơn lấy tích Đề - các của R S, rồi mới chọn trong kết quảnhững bộ có giá trị tại B bằng giá trị tại C
Qua ví dụ đơn giản trên đủ để cho thấy tối ưu hóa là cần thiết
Quá trình tối ưu hóa câu hỏi thường được chia làm hai pha: tối ưu hóa logic và tối ưu
hóa vật lí Tối ưu hóa logic cho phép viết lại câu hỏi dưới dạng chuẩn tắc đơn giản và được tối ưu hóa về mặt logic, cóc nghĩa không tính tới các chi phí truy cập dữ liệu Tối ưu hóa
vật lí thực hiện chọn các thuật toán tốt nhất cho các toán tử mức thấp có tính tới kích thước
dữ liệu và các đường truy cập sẵn có
Tối ưu hóa logic được thực hiện ở mức của đại số quan hệ, trong khi tối ưu hóa vật lícho phép, nói riêng, thiết lập các chú giải Tối ưu hóa vật lí cần tới một mô hình chi phí để
Trang 4ước lượng chi phí của mỗi phương án thực thi nhằm chọn được phương án tối ưu hay gầntối ưu
Phần còn lại của chương được tổ chức như sau:
Mục 2: Trình bày về các mục tiêu của tối ưu hóa
Mục 3 Dành cho việc nghiên cứu các phương pháp chính của tối ưu hóa logic nhằmtìm câu hỏi đơn giản nhất tương đương với câu hỏi đã cho và sử dụng một phương phápheuristic cấu trúc lại cây đại số để xây dựng một dạng chuẩn tắc
Mục 4 Nghiên cứu các thuật toán khác nhau truy cập vật lí tới dữ liệu bao gồm phépchọn, phép chiếu, phép kết nối
Mục 5 Mô tả mô hình chi phí
Cuối cùng là tóm lược chương
Một số phần trong chương này được trích dẫn trong [1]
2 Các mục tiêu của tối ưu hóa
2.1 Câu hỏi tĩnh và câu hỏi động
Trước hết bộ tối ưu hóa cần phân biệt được hai loại câu hỏi này
Câu hỏi tĩnh (Static query): là câu hỏi SQL thường được tích hợp vào một chương
trình ứng dụng trong đó mã lệnh thực hiện nó đã biết được cố định, thường được thực hiệnnhiều lần Loại câu hỏi này đáng được tối ưu hóa vì việc tối ưu hóa được thực hiện chỉmột lần khi biên dịch chương trình có chứa câu hỏi, để sau đó nó được thực hiện hàngnghìn, hàng vạn lần Câu hỏi SQL có thể được tham số hóa, các giá trị hằng được truyềnbởi các biến của chương trình Vì vậy, bộ tối ưu hóa phải có khả năng tối ưu hóa các câuhỏi được tham số hóa, chẳng hạn một tân từ như SO_LUONG = $x, trong đó x là một biếnchương trình
Câu hỏi động (Dynamic query): là câu hỏi SQL thường được thiết lập theo kiểu
tương tác (trực tuyến) với mã không biết trước, thường chỉ được thực hiện một lần Vớiloại câu hỏi này, không nên tốn quá nhiều thời gian vào việc tìm phương án thực thi tối ưuhoặc gần tối ưu vì câu hỏi chỉ thực hiện một lần vì thời gian để xử lí một câu hỏi như vậy
sẽ là tổng của thời gian tìm một phương án tối ưu và thời gian thực thi phương án
2.2 Phân tích câu hỏi
Như đã được chỉ rõ trong hình 1, thoạt đầu câu hỏi được phân tích về mặt cú pháp,kiểm tra tên các quan hệ và các thuộc tính trong câu hỏi có trong lược đồ CSDL không,phân tích tính đúng đắn của điều kiện trong câu hỏi Tiếp đến, câu hỏi được biến đổi vềdạng chuẩn tắc, dạng chuẩn hội hay chuẩn tuyển
Từ câu hỏi đã được phân tích, phần lớn các hệ thống tạo sinh ra một cây phép toáncủa đại số quan hệ (chiếu, chọn, kết nối, hợp, hiệu, giao), có thể được mở rộng với các
phép toán gộp và các phép sắp xếp, được gọi là cây đại số hay cây quan hệ (đôi khi còn gọi là cây xử lí (processing tree)).
Như vậy, cây đại số là cây nhị phân biểu diễn một câu hỏi trong đó các nút lá biểudiễn các quan hệ, các nút trung gian biểu diễn các phép toán của đại số quan hệ, nút gốcbiểu diễn kết quả của câu hỏi, còn các cung biểu diễn các dòng dữ liệu giữa các phép toán
Trang 5Cây đại số quan hệ cũng tương tự như cây nhị phân biểu diễn biểu thức mà các bạn đã học
ở phần cấu trúc cây nhị phân trong môn học Cấu trúc dữ liệu và Giải thuật
Từ cây đại số, có thể tạo sinh một phương án thực thi bằng cách đi dọc theo cây, từ
lá tới gốc Một phép toán có thể được thực hiện theo kiểu hướng tập (set orientedexecution) bao gồm việc tính tập tất cả các bộ của các quan hệ đầu vào của một toán từtrước khi định giá toán tử đó
Như vậy, nếu phép toán O1 không dùng các kết quả của phép toán O2 thì các phéptoán O1 và O2 có thể được thực hiện song song Kiểu thực hiện này có thể thích hợp chonhững thuật toán có khả năng làm việc hiệu quả trên các tập (trên cơ sở của phép sắp xếpchẳng hạn)
Một phép toán cũng có thể được thực hiện theo kiểu từng bộ một hay kiểu đường ống(pipeline execution) Cụ thể là khởi động phép toán sớm nhất có thể, ngay khi đã có một bộcho ít nhất một toán hạng
Đối với phép toán một ngôi, chỉ cần có một bộ là đủ Như vậy, có thể thực hiện haiphép chọn liên tiếp theo kiểu đường ống, có nghĩa là bắt đầu thực hiện phép chọn thứ haingay khi có một bộ (hay một trang gồm một số bộ) được sinh bởi phép chọn thứ nhất Các phép toán hai ngôi, như phép hiệu r – s chẳng hạn, chỉ có thể bắt đầu sau khi đãtính được đầy đủ toán hạng s Như vậy, kiểu đường ống chỉ có khả năng thực hiện mộttoán hạng
2.3 Các chức năng của bộ tối ưu hóa
Bộ tối ưu hóa có mục tiêu là tìm ra một phương án thực thi được tối ưu hóa
Có thể định nghĩa một phương án thực thi là một chương trình (có thể song song),các phép toán sơ cấp phải thực hiện để định giá câu trả lời cho một câu hỏi, thường được
thực hiện làm hai giai đoạn: viết lại (rewriting) và lên phương án (planning).
Viết lại là giai đoạn của tối ưu hóa bao gồm biến đổi câu hỏi về mặt logic để có đượcmột biểu diễn chuẩn tắc Giai đoạn này chứa đựng khía cạnh ngữ nghĩa trong đó có thể tínhtới các ràng buộc toàn vẹn và khía cạnh cú pháp, đưa các điều kiện trong câu hỏi về dạngchuẩn (hội hay chuyển) và gán cho các toán tử đại số một thứ tự cố định
Lên phương án là giai đoạn của tối ưu hóa bao gồm cả việc sắp xếp lại các toán tửđại số (đã được thực hiện ở giai đoạn viết lại), chọn các thuật toán và kiểu thực hiện(hướng tập hay đường ống)
Như vậy giai đoạn viết lại tạo ra một cây logic, còn giai đoạn lên phương án sẽ bổsung các chú giải để có một phương án thực thi
Đương nhiên, ta tìm cách tối ưu hóa thời gian trả lời, có nghĩa làm cực tiểu thời giancần thiết cho việc thực thi câu hỏi Vấn là tạo sinh một cây tối ưu và chọn những thuật toántốt nhất để thực hiện mỗi toán tử và cây đại số xét trong toàn thể Muốn vậy, phải tối ưuhóa đồng thời:
- Số các vào/ra
- Sự song song giữa các toán tử
- Thời gian tính cần thiết (thời gian CPU)
Trang 6Việc tối ưu hóa được thực hiện phụ thuộc nói riêng vào thứ tự các phép toán trongcây đại số được dùng các thuật toán được giữ lại Do đó, điều quan trọng là thiết lập đượccác quy tắc cho phép từ cây ban đầu phát sinh ra tất cả các phương án có thể, để sau đóchọn được phương án với chi phí nhỏ nhất Thực sự là các cây rất lớn, nên ta thường phảiđịnh nghĩa các quy tắc heuristic để xác định một cây gần tối ưu
3 Tối ưu hóa logic hay phép viết lại
Phép viết lại cho phép thu được một biểu diễn chuẩn tắc của câu hỏi, dưới dạng mộtcây đại số trong đó các phép toán được sắp thứ tự và các điều kiện được viết dưới dạngchuẩn
Phép viết lại có thể bao gồm phép viết lại ngữ nghĩa và phép viết lại cú pháp
3.1 Phân tích và viết lại ngữ nghĩa
Loại phân tích này nhằm xác định tính đúng đắn của câu hỏi, tìm các câu hỏi tươngđương trên cơ sở thao tác trên điều kiện của câu hỏi này nhờ vào các ràng buộc toàn vẹn
Để thực hiện việc phân tích ngữ nghĩa của câu hỏi, có thể dùng đồ thị liên kết cácquan hệ (Relation connection graph), đồ thị các kết nối, đồ thị liên kết các thuộc tính(Attribute connection graph)
Đồ thị liên kết các quan hệ là đồ thị trong đó:
1 Một đỉnh được kết hợp với mỗi xuất hiện của một quan hệ
2 Một phép kết nối được biểu diễn bởi một cung giữ hai nút biểu diễn các quan hệđược kết nối
3 Một phép chọn được biểu diễn bởi một khuyên của nút ứng với quan hệ trên đóphép chọn được áp dụng
4 Phép chiếu cuối cùng được biểu diễn bởi một cung từ nút quan hệ tới một nút đặcbiệt là nút kết quả
Đồ thị các kết nối là đồ thị liên kết các quan hệ trong đó chỉ giữ lại các nút và các
cung biểu diễn các phép kết nối giữa chúng
Đồ thị liên kết các thuộc tính là đồ thị trong đó:
1 Một đỉnh được kết hợp với mỗi thuộc tính hay một hằng được tham chiếu (hay dẫntrỏ)
2 Một phép kết nối được biểu diễn bởi một cung giữa các thuộc tính tham gia
3 Một phép chọn được biểu diễn bởi một cung giữa một thuộc tính và một hằng
Đồ thị liên kết các thuộc tính cho phép phát hiện các điều kiện trong câu hỏi có chứamâu thuẫn, nếu có chứa một chu trình không được thỏa mãn bởi các hằng Nó cũng chophép phát hiện các câu hỏi tương đương với câu hỏi đã cho nhờ tính bắc cầu
Hai hình vẽ dưới đâytheo thứ tự các đồ thị liên kết các quan hệ và đồ thị liên kết cácthuộc tính của câu hỏi được nói ở ví dụ ở trên có biểu diễn bằng SQL như sau
SELECT A
FROM R, S
WHERE R.B=S.C AND S.D=100
Trang 7Bây giờ ta nói về tính đúng đắn của một câu hỏi Có thể phân biệt hai loại câu hỏikhông đúng đắn sau:
1 Một câu hỏi có thể được phát biểu không chỉnh vì trong câu hỏi có chứa những
phần vô ích: người viết câu hỏi rõ ràng đã quên một phép kết nối trong câu hỏi
2 Một câu hỏi có thể chứa đựng một mâu thuẫn không có bộ nào thỏa được, như với
câu hỏi “Tìm số hiệu nhà cung cấp có cung cấp mặt hàng P2 với số lượng lớn hơn 40 vànhỏ hơn 20”
Sau đây là hai kết quả quan trọng cho phép loại bỏ các câu hỏi không đúng đắn,
trong trường hợp các câu hỏi hội (không có phép hay là) với các toán tử so sánh =, <, >, ,
a Một câu hỏi thường là được phát biểu không chỉnh nếu đồ thị liên kết các quan hệ
của nó không liên thông [4] Thực vậy, mọi đồ thị con không được nối với nút kết quả sẽkhông tham gia vào kết quả đó
b Một câu hỏi là mâu thuẫn nếu đồ thị liên kết các thuộc tính của nó được bổ sung
thêm các cung so sánh giữa các hằng tạo ra một chu trình không thỏa được [4] Thực vậy,khi đó không có bộ nào có thể thỏa được những tân từ của chu trình, kiểu nhưSO_LUONG < 20 và SO_LUONG>40
Nhớ rằng không phải các kỹ sư lập trình ra câu hỏi truy vấn mà là các người sử dụngnghiệp dư mới là người truy vấn dữ liệu và kỹ sư lập trình có nhiệm vụ phân tích câu hỏi
ấy trước khi cho thực thi!
Trong các phần sau chúng ta sẽ thấy vai trò của các đồ thị nói trên trong quá trình càiđặt tối ưu câu truy vấn là rất lớn
3.1.1 Các câu hỏi tương đương do bắc cầu
Trước hết ta cho một định nghĩa chính xác về các câu hỏi tương đương (Equivalentqueries)
Định nghĩa
kqA
R
BS.D
100
Trang 8Hai câu hỏi là tương đương nếu và chỉ nếu chúng cho cùng kết quả với mọi thể hiện
(ngoại diên) có thể của cơ sở dữ liệu
Từ việc nghiên cứu đồ thị liên kết các thuộc tính có thể phát hiện ra các câu hỏitương đương
Thực vậy, mọi cặp thuộc tính (Ai, Bj) được nối với nhau bằng một đường đi từ Ai tới
Bj mà trên mọi cạnh của đường đi đều có nhãn đẳng thức, thì do tính bắc cầu, phải có Ai =
Bj.
Khi đó chẳng hạn trong đồ thị liên kết ban đầu, nếu thay đồ thị con ta sẽ thu đượcmột câu hỏi tương đương
6.3.1.2 Các câu hỏi tương đương được suy từ các ràng buộc toàn vẹn
Một cách khác để tạo sinh các câu hỏi tương đương là sử dụng các ràng buộc toànvẹn [2,3] Bài toán được đặt ra như sau
Cho câu hỏi thỏa điều kiện Q và một tập các ràng buộc toàn vẹn I1, I2,…In
Nếu Q mâu thuẫn với một trong các ràng buộc Ii, câu hỏi có câu trả lời là rỗng.Ngược lại, chỉ cần định giá điều kiện Q’ (đơn giản hơn Q) sao cho:
I1 I2 … In Q’Q
(Các kiến thức về biểu diễn tri thức trong Trí tuệ nhân tạo giúp bạn về Q’ đơn giảnhơn Q, I1 I2 … In Q’Q … là gì)
Ta minh họa các phép biến đổi ngữ nghĩa qua một số ví dụ đơn giản
Xét cơ sở dữ liệu về việc cung cấp hàng hóa, gồm 3 quan hệ sau:
S(S#, SNAME, CITY, STATUS)
P(P#, PNAME, COLOR, ADDR, WEIGHT)
SP(S#, P#, QTY)
Với S#, P# lần lượt là mã số của nhà cung cấp hàng hóa và hàng hóa
SNAME, PNAME lần lược là tên nhà cung cấp và tên mặt hàng
CITY là địa chỉ của nhà cung cấp và ADDR là địa chỉ lưu trữ của mặt hàng
Trước hết hãy xét biểu thức sau:
P# (SPS)Phép kết nối ở đây là phép kết nối tự nhiên trên thuộc tính S# là thuộc tính chung củahai quan hệ S và SP Mặt khác vì S# là một khóa ngoại của quan hệ SP và là khóa của quan
hệ S, suy ra mọi bộ của quan hệ SP đều kết nối với một bộ nào đó của quan hệ S và sẽđóng góp một giá trị của S# vào kết quả cuối cùng Nói cách khác, nhờ vào ràng buộc toànvẹn ta thấy trong biểu thức trên, phép kết nối là không cần thiết và biểu thức đã cho tươngđương với biểu thức
P#(SP)
Giả sử rằng CSDL cung cấp hàng hóa của ta thỏa ràng buộc “mọi mặt hàng màu đỏ
phải được lưu trữ ở Huế” Khi đó một câu hỏi khác phức tạp như: “Tìm các nhà cung cấp chỉ cung cấp các mặt hàng màu đỏ và có địa chỉ là thành phố của ít nhất một mặt hàng
Trang 9được anh ta cung cấp” có thể được biến đổi thành một câu hỏi tương đương đơn giản hơn:
“Tìm các nhà cung cấp ở Huế chỉ cung cấp các mặt hàng màu đỏ”
Gần đây, tối ưu hóa ngữ nghĩa được phát triển trong ngữ cảnh của các hệ CSDLhướng đối tượng và sematic web Các ràng buộc tương đương, kéo theo, tính duy nhất củakhóa, ràng buộc bao hàm đặc biệt hữu ích để biến đổi và làm đơn giản các câu hỏi
3.2 Viết lại cú pháp và cấu trúc lại cây đại số
Đây là các kỹ thuật cơ sở nhằm biến đổi cây đại số và thay đổi thứ tự thưc hiện cácphép toán, dựa trên tính giao hóan và kết hợp của các phép toán đại số quan hệ
3.2.1 Biểu thức tương đương
Trong phần này ta xem quan hệ như là tập các ánh xạ từ tập các thuộc tính U lênmiền giá trị D (xem lại phần các định nghĩa CSDL quan hệ - chương mô hình CSDL quanhệ)
Lúc đó một biểu thức đại số quan hệ có các hạng thức là biến quan hệ R1, R2 , ,Rn,các quan hệ hằng được xác định từ k - bộ của các quan hệ (r1,r2, ,rn) trong đó ri là quan hệtrên lược đồ Ri và thay thế ri vào Ri khi đánh giá biểu thức
Hai biểu thức E1 và E2 được gọi là tương đương viết tắt là E1E2 nếu chúng biểudiễn cùng một ánh xạ, nghĩa là nếu thay thế cùng các quan hệ cho tên các lược đồ tươngứng ở hai biểu thức cho ra cùng một kết quả
Với cách hiểu tương đương trên ta đưa ra một số qui tắc chuyển dịch đại số quan hệthông thường sau đây
3.2.2 Các qui tắc liên quan tới phép kết nối và phép tích Đề-các
(1) Quy tắc giao hoán của phép nối và phép tích Đề - các
Với E1 và E2 là hai biểu thức quan hệ và F là biểu thức điều kiện
1 2
1 2 2
EE)
E
F
2 F 1 3 F
2 F 1
2 1
2 1
) ( E1 E2 E3 E1 E2 E3
) (
) ( E1 E2 E3 E1 E2 E3
Các qui tắc liên quan đến phép chọn và chiếu
(3) Dãy các phép chiếu
Nếu dãy các thuộc tính A1, ,An nằm trong dãy các thuộc tính B1, ,Bm thì:
) ( ))
( (
2 1 2
1
n m
A A
Trang 10(4) Dãy các phép chọn
) ( ))
( (
2 1 2
( (
1 2 2
( (
1 2 2
Nếu F = F1 F2 , với F1 chỉ liên quan với E1 và F2 liên quan với E2, ta có
) ( ) ( )
2 1
(8) Giao hoán phép chọn và một phép hiệu
)()()(E1 E2 F E1 F E2
(9) Giao hoán giữa phép chọn và kết nối tự nhiên
)(
*)()
*(E1 E2 F E1 F E2
(10) Giao hoán một phép chiếu và một phép tích Đề các
A1, ,An là tập thuộc tính bao gồm B1, ,Bm của E1 và C1, ,Ck của E2 thì
)()
()
1 1
k m
()
1 1
n n
A
Lưu ý rằng phép chọn với phép giao; phép chiếu với phép hiệu lại không có tính giaohoán, hãy cho một phản ví du
Phép chứng minh của các qui tắc trên có thể tham khảo trong [5]
3.2.3 Tối ưu hóa trên cơ sở đại số
Sau đây là 6 chiến lược tối ưu hoá câu hỏi tổng quát [5]
- Thực hiện phép chọn càng sớm càng tốt.
Việc làm này nhằm làm giảm số bộ tham gia vào biểu thức, vì vậy làm giảm đi kích
cỡ của kết quả trung gian, nên chi phí truy cập bộ nhớ, cũng như lưu trữ cũng ít đi
- Tổ hợp một số phép chọn với tích Đề - các thành phép kết nối.
Trang 11Vì phép kết nối, nhất là kết nối bằng chi phí thực hiện "rẻ" hơn phép tích Đề-các.
- Tổ hợp các chuỗi phép toán một ngôi như phép chọn và chiếu.
Nhằm làm giảm đi số phép toán
- Tìm các biểu thức con chung trong một biểu thức
Nếu kết quả của một biểu thức con chung (biểu thức xuất hiện nhiều lần) là một quan
hệ không lớn và có thể đọc nó từ bộ nhớ thứ cấp với ít thời gian thì nên tính toán biểu thức
đó trước Thường là đưa các kết quả của các biểu thức con chung đó thành một view.Nhờ các biểu thức con chung này ta có thể phân rã câu hỏi thành các câu hỏi con đơngiản hơn, vấn đề này sẽ được bàn trong phần tiếp theo
- Xử lý các tệp trước
Hai vấn đề xử lý quan trọng cần thực hiện trước khi thực hiện các câu hỏi, cũng nhưbất cứ công việc khai thác dữ liệu nào là: sắp xếp trước và thiết lập các tệp chỉ số cho cáctệp dữ liệu Lúc này rõ ràng việc thực hiện các câu hỏi sẽ dễ dàng, nhanh chóng hơn
- Đánh giá trước khi thực hiện tính toán
Khi lựa chọn trình tự thực hiện các phép tính trong một biểu thức, hoặc lựa chọnmột trong hai đối số của phép tính hai ngôi cần tính toán xem chi phí thực hiện các phéptính đó (số phép tính, thời gian, dung tích bộ nhớ ) từ đó có được chi phí tổng quát chocách thực hiện câu hỏi Chẳng hạn nên thực hiện các phép kết nối có kết quả hẹp nhấttrước trong một dãy các phép kết nối
Cụ thể, chúng ta có thể áp dụng các qui tắc đã nêu ở phần trên để đưa ra một trình tự
có tính heuristic nhằm tối ưu hóa các biểu thức quan hệ
Bước 1: Sử dụng quy tắc 4) để tách một phép chọn F1 F n(E) thành chuỗi các phépchọn F1((F n(E)))
Bước 2: Đối với mỗi phép chọn, sử dụng các quy tắc từ (4) đến (9) để di chuyểnphép chọn xuống càng thấp càng tốt
Bước 3: Đối với mỗi phép chiếu, sử dụng các quy tắc (3), (10), (11) và quy tắc (5)suy rộng để di chuyển phép chiếu xuống càng thấp càng tốt
Bước 4: Sử dụng các quy tắc (3), (4) và (5) để tổ hợp các phép chọn và các phépchiếu thành một phép chọn, một phép chiếu , hoặc một phép chọn được một phép chiếutheo sau
Bước 5 Nhóm các phép chiếu tuần tự , giữ các thuộc tính, bỏ đi các phép chiếukhông cần thiết như chiếu Ai với i
Thí dụ
Xét CSDL quản lý tư liệu với các quan hệ sau:
BOOKS(TITLE, AUTHOR, PNAME,LC_NO): quan hệ sách
PUBLISHERS(NAME, PADDR, PCITY, CARD_NO): quan hệ nhà xuất bản
Trang 12BORROWERS(NAME, ADDR, CITY, CARD_NO): quan hệ độc giả
LOANS(CARD_NO, LC_NO, DATE): quan hệ sổ mượn
Trong đó các thuộc tính là:
PNAME: Tên nhà sản xuất
LC_NO: Số thư viện
PADDR:Địa chỉ của nhà sản xuất
PCITY: Thành phố nơi có nhà sản xuất
CARD_NO: Số thẻ của độc giả
ADDR: Địa chỉ độc giả DATE
CITY: Thành phố nơi độc giả ở
DATE: Ngày mượn sách
Để lưu trữ thông tin về sách, có thể giả thiết thêm rằng, có một khung nhìn XLOANSbao gồm một số thông tin bổ sung về sách được mượn XLOANS là kết nối tự nhiên củaquan hệ BOOKS,BORROWERS , và LOANS và nó có thể được định nghĩa là:
))(
Trong đó:
)_._
.(
)_
_
(BORROWERS CARD NO LOANS CARD NO BOOKS LC NO LOANS LC NO
Còn S là danh sách các thuộc tính trong khung nhìn:
TITLE, AUTHOR, PNAME, LC-NO, NAME, ADDR, CITY, CARD_NO, DATECần đưa ra một danh sách những cuốn sách đã được mượn trước ngày 08/03/02 bằngcách đặt một câu vấn tin:
))(
( DATE 08.03.2002 XLOANS TITLE
(
) _ _
(
, _ ,
, , , _ , , ,
2002 03 08
NO CARD LOANS NO CARD BORROWERS NO
LC LOANS NO LC BOOKS
DATE NO CARD BORROWERS CITY
ADDR NAME NO LC BOOKS AUTHOR TITLE
DATE TITLE
Trang 13Chú ý rằng LOANS.CARD_NO là tên của một thuộc tính trong:
)(
Bởi vì nó là thuộc tính của LOANS và kết quả chọn cũng sử dụng các thuộc tính đó
Kế tiếp chúng ta có thể tổ hợp hai phép chiếu thành một là TITLE nhờ qui tắc (3).Cây kết quả như sau:
Trang 14Sau đó nhờ qui tắc (5) mở rộng chúng ta có thể thay TITLE và
NO LC LOANS NO
TITLE,BOOKS.LCNO,LOANS.LC_NO
Chúng ta áp dụng qui tắc (10) để thay phép chiếu cuối cùng bằng:
TITLE,BOOKS.LCNO,LOANS.LC_NO
Để áp dụng cho BOOKS và LOANS.LC_NO thì áp dụng cho toán hạng bên trái của tích
Đề - các bên trên cây kết quả trên
Phép chiếu sau tương tác với phép chọn bên dưới nó nhờ qui tắc (5) mở rộng tạo ra chuỗi:
LOANS.LCNO
BORROWERS.CARDNOLOANS.CARDNO
LOAN.LCNO,BORROWERS.CARDNO,LOANS.CARDNO
Phép chiếu cuối cùng được chuyển cho tích Đề - các nhờ qui tắc (10) và chuyển mộtphần cho phép chọn DATE08.03.2002 nhờ qui tắc (5) mở rộng.Sau đó chúng ta phát hiệnrằng trong biểu thức:LOANS.LCNO,LOANS.CARDNO,DATE
Phép chiếu này không cần thiết bởi vì tất cả các thuộc tính của LOANS đều được sửdụng Do đó chúng ta loại bỏ phép chiếu này.Cây kết quả cuối cùng được trình bày nhưsau:
TITLE
BOOKS.LCNOLOANS.LCNO
Trang 153.3 Sắp thự tự các phép toán trên cơ sở phân tách câu hỏi
Phép phân tách câu hỏi dựa trên phân tách và thay thế bộ cho phép sắp xếp các phéptoán lại theo thứ tự: chọn, nửa nối, kết nối
Phép tách nhằm lấy đi một thành phần của một câu hỏi có đúng 1 biến chung vớiphần còn lại của câu hỏi
Phép thay thế bộ thay thế một trong số các biến của câu hỏi, mỗi lần một bộ
Phép tách được ưu tiên thực hiện trước phép thế bộ
Xét ví dụ sau, để quản lí hàng hóa trong việc vận chuyển bằng tàu hỏa, ta có cơ sở dữliệu gồm hai quan hệ:
TAU (TTU_TAU, TTU_TOA)
TOA(TTU_TOA, KIEUTOA,TLU_TOA, NLU_TOA, TITR, GA)
Trong đó
TTU_TAU: thứ tự tàu
TTU_TOA: thứ tự toa
TLU_TOA: trọng lượng toa
NLU_TOA: năng lực toa
TITR : tình trạng
GA: Ga tàu mà toa đó đỗ
Giả sử có yêu cầu: “Hãy đưa ra danh sách các kiểu toa của đoàn tàu có thứ tự tàu
4002”, với câu lệnh truy vấn trong SQL như sau:
Select KIEUTOA
From TAU,TOA
Where (TOA.TTU_TOA =TAU.TTU_TOA) and (TAU.TTU_TAU=4002)
Có thể tách câu vấn tin trên thành hai câu vấn tin con và thực hiện chúng theo trình
tự như trình bày dưới đây:
Selec * INTO T1
Trang 16Where TOA.TTU_TOA= T1.TTU_TOA
Dưới đây sẽ trình bày một cách tổng quát vấn đề và sẽ nghiên cứu vì sao có thể tạo rađược các câu hỏi con như trên
Trong SQL các câu hỏi thường gặp là câu hỏi có dạng tổng quát:
Select A1, ,An
From R1, ,Rn
Where F1 and F2
Với F1, F2 là các mệnh đề chọn hoặc mệnh đề kết nối
Một câu hỏi là tách được với một biến (quan hệ) tách Xm , nếu có thể biểu diễn dướidạng:
Select A1, A2, An
From R1, R2, ,Rn
Where F1(X1, ,Xm) and F2(Xm,Xm+1, ,Xn)
Như vậy để một câu hỏi có thể tách được, danh sách các biến trong biểu thức điều
kiện trong mệnh đề WHERE có thể biểu diễn dưới dạng and của hai biểu thức điều kiện
đều có chứa biến Xm, những biến còn lại chỉ có mặt nhiều nhất là một lần ở trong hai biểuthức thành phần
Sử dụng các khái niệm đồ thị liên kết quan hệ và đồ thị liên kết thuộc tính, để biểudiễn câu hỏi, ta có thể nhận ra các thành phần có thể tách được của các câu hỏi
Ví dụ: Xét CSDL quản lý đường sắt, gồm các quan hệ sau:
Quan hệ đường:DUONG (TTU_DG, GA)
Quan hệ tàu: TAU (TTU_TAU, TTU_TOA)
Quan hệ hiện trạng: HTR (TTU_TAU, TTU_DG, TTU_NG)
Ở đây:
TTU_TOA: Thứ tự TOA; TTU_DG: Thứ tự đường; GA: Tên ga; TTU_TAU: Thứ
tự tàu; TTU_NG: Ngày khởi hành
Với câu hỏi: Hãy cho danh sách các toa khởi hành từ ga HUẾ vào ngày 05.01.02
Q 0
Selec TTU_TOA