Tải bản đầy đủ (.pdf) (83 trang)

Xử lý truy vấn và quản lý giao tác trong cơ sở dữ liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.34 MB, 83 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ





Đào Thị Thu Vân





XỬ LÝ TRUY VẤN VÀ QUẢN LÝ GIAO TÁC












LUẬN VĂN THẠC SĨ













Hà Nội - 2005

1

MỤC LỤC
MỞ ĐẦU 3
CHƢƠNG 1 XỬ LÝ VÀ TỐI ƢU TRUY VẤN 4
1.1 Chuyển các truy vấn SQL thành đại số quan hệ 5
1.2 Các thuật toán cơ bản thực hiện phép toán truy vấn 8
1.2.1 Sắp xếp ngoài 8
1.2.2 Thực thi phép chọn (SELECT) 11
1.2.3 Thực thi phép nối (JOIN) 15
1.2.4 Thực thi phép chiếu và các phép toán tập hợp 21
1.2.5 Thực thi các phép toán kết hợp 23
1.2.6 Thực thi phép nối ngoài - Outer Join 24
1.2.7 Các phép toán kết hợp sử dụng đƣờng ống 25
1.3 Sử dụng các luật dự đoán trong tối ƣu truy vấn 26
1.3.1 Các ký hiệu với cây truy vấn và đồ thị truy vấn 26
1.3.2 Tối ƣu kinh nghiệm của các cây truy vấn 30
1.3.3. Chuyển cây truy vấn thành phƣơng án thực thi truy vấn 37
1.4 Sử dụng ƣớc lƣợng chọn lọc và ƣớc lƣợng chi phí trong tối ƣu truy
vấn 38

1.4.1 Các thành phần chi phí cho việc thực thi truy vấn 39
1.4.2 Thông tin danh mục sử dụng trong các hàm giá 40
1.4.3 Ví dụ của các hàm giá đối với phép SELECT 41
1.4.4 Ví dụ của các hàm giá đối với phép JOIN 43
1.4.5 Các truy vấn có quan hệ và thứ tự nối phức tạp 46
1.4.6 Ví dụ minh hoạ cho việc tối ƣu truy vấn dựa trên giá 48
1.5 Tối ƣu truy vấn ngữ nghĩa 51
1.6 Tổng kết 51


2

CHƢƠNG 2 XỬ LÝ GIAO TÁC 53
2.1 Giới thiệu về xử lý giao tác 53
2.1.1 Hệ thống đơn ngƣời dùng - hệ thống đa ngƣời dùng 53
2.1.2 Các giao tác, thao tác đọc - ghi và các vùng đệm DBMS 54
2.1.3 Tại sao điều khiển đồng thời là cần thiết 56
2.1.4 Tại sao khôi phục là cần thiết 59
2.2 Các khái niệm hệ thống và giao tác 61
2.2.1 Các trạng thái giao tác và các phép toán bổ xung 61
2.2.2 File log hệ thống 62
2.2.3 Điểm xác nhận của một giao tác 63
2.3 Các đặc tính mong muốn của giao tác 64
2.4 Lịch biểu và sự khôi phục 64
2.4.1 Lịch biểu của các giao tác 65
2.4.2 Miêu tả đặc tính các lịch biểu dựa trên việc khôi phục 66
2.5 Xếp thứ tự của lịch biểu 68
2.5.1 Các lịch biểu theo thứ tự, không theo thứ tự và lịch biểu có thứ tự
xung đột 68
2.5.2. Kiểm tra thứ tự xung đột của một lịch biểu 72

2.5.3 Sử dụng tính thứ tự 77
2.5.4 Tƣơng đƣơng khung nhìn và trật tự khung nhìn 78
2.5.5 Các kiểu tƣơng đƣơng khác của các lịch biểu 79
2.6 Tổng kết 79
KẾT LUẬN 81
TÀI LIỆU THAM KHẢO 82


3
MỞ ĐẦU
Khi dữ liệu đƣợc lƣu trữ trên máy tính thì việc sử dụng nó nhƣ thế nào
để có hiệu quả là một thách thức đối với ngƣời sử dụng. Để khai thác một cơ
sở dữ liệu tốt cần phải có một hệ quản trị cơ sở dữ liệu tốt. Việc xử lý các truy
vấn, quản lý giao tác là hai chức năng quan trọng của một hệ quản trị cơ sở dữ
liệu. Tìm hiểu về lý thuyết và thực tiễn của hai chức năng này có ý nghĩa
trong việc xây dựng các hệ quản trị cơ sở dữ liệu. Thông qua việc nghiên cứu
một số tài liệu khoa học có liên quan, trong luận văn này chúng tôi đã đi sâu
tìm hiểu các vấn đề với đề tài “xử lý truy vấn và quản lý các giao tác”.
Luận văn bao gồm hai chƣơng:
Chƣơng 1: Xử lý và tối ƣu truy vấn
Một truy vấn trên cơ sở dữ liệu là một biểu thức đại số quan hệ, thực
hiện một loạt các thao tác trên cơ sở dữ liệu quan hệ để lấy ra các thông tin
cần thiết cho việc quản lý. Nghiên cứu về xử lý và tối ƣu truy vấn là nghiên
cứu các thuật toán thực hiện các phép toán đại số quan hệ cũng nhƣ tìm cách
thực hiện biểu thức đại số quan hệ theo một trật tự nào đó để có câu trả lời
nhanh nhất.
Chƣơng 2: Quản lý giao tác
Quản lý giao tác là rất cần thiết, đặc biệt khi các giao tác xẩy ra đồng
thời và có cạnh tranh nhau một số khoản mục dữ liệu trong cơ sở dữ liệu, tính
nhất quán có thể không còn đƣợc bảo toàn nữa. Do vậy hệ thống cần điều

khiển sự tƣơng tác giữa các giao tác đồng thời.
Do kinh nghiệm làm việc với cơ sở dữ liệu còn ít, chắc chắn trong luận
văn còn nhiều thiếu sót. Chúng tôi chân thành mong đƣợc các thầy, các cô, và
bạn bè đóng góp ý kiến.


4
CHƢƠNG 1 XỬ LÝ VÀ TỐI ƯU TRUY VẤN

Trong chƣơng này trình bầy các kỹ thuật mà hệ quản trị cơ sở dữ liệu
(DBMS) sử dụng để xử lý, tối ƣu hoá và thực thi các truy vấn bậc cao. Một
truy vấn đƣợc trình bầy trong một ngôn ngữ bậc cao, nhƣ SQL, đầu tiên phải
đƣợc kiểm tra, phân tích và xác nhận tính hợp lệ. Bộ quét sẽ xác định các dấu
hiệu ngôn ngữ, nhƣ các từ khóa SQL, tên các thuộc tính và tên các quan hệ
trong nội dung câu truy vấn, trong khi đó bộ phân tích sẽ kiểm tra cú pháp của
truy vấn để xác định xem nó có đƣợc trình bầy phù hợp với các luật cú pháp
của ngôn ngữ truy vấn hay không. Một truy vấn cũng phải đƣợc xác nhận tính
hợp lệ bằng cách kiểm tra tất cả các tên quan hệ và thuộc tính là hợp lệ, và các
tên có ý nghĩa trong lƣu đồ cơ sở dữ liệu cụ thể đƣợc truy vấn. Sau đó một
biểu diễn bên trong của truy vấn đƣợc tạo ra, thƣờng là nhƣ một cấu trúc dữ
liệu cây gọi là một cây truy vấn. Cũng có thể biểu diễn truy vấn bằng cách sử
dụng một cấu trúc dữ liệu đồ thị gọi là đồ thị truy vấn. Sau đó DBMS sẽ phải
đƣa ra một chiến lƣợc thực hiện để lấy ra kết quả của truy vấn từ các file cơ
sở dữ liệu. Một truy vấn thƣờng có nhiều chiến lƣợc thực hiện, và quá trình
chọn một chiến lƣợc phù hợp để xử lý một truy vấn gọi là tối ƣu truy vấn. [1,
3, 4, 5, 6, 7]
Hình 1.1 thể hiện các bƣớc khác nhau của việc xử lý một truy vấn bậc
cao. Bộ tối ƣu truy vấn có nhiệm vụ tạo ra một phƣơng án thực hiện và bộ tạo
mã tạo ra chƣơng trình để thực hiện phƣơng án đó. Bộ xử lý cơ sở dữ liệu thời
gian chạy có nhiệm vụ chạy chƣơng trình truy vấn trong kiểu thông dịch hoặc

biên dịch để tạo ra kết quả của truy vấn. Nếu có một lỗi chạy chƣơng trình
đƣợc tạo ra thì bộ xử lý cơ sở dữ liệu thời gian chạy sẽ sinh ra một thông báo
lỗi.
Thuật ngữ tối ƣu đƣợc sử dụng ở đây là không chính xác vì trong một
vài trƣờng hợp, phƣơng án thực hiện đƣợc lựa chọn không phải là chiến lƣợc
tốt nhất, nó chỉ là một chiến lƣợc hiệu quả và hợp lý cho việc thực hiện truy
vấn. Việc tìm ra một chiến lƣợc tốt nhất thƣờng phải mất nhiều thời gian,
ngoại trừ những truy vấn đơn giản, và có thể yêu cầu thông tin về việc các file

5
đƣợc cài đặt nhƣ thế nào và ngay cả nội dung của các file, những thông tin đó
có thể không có trong từ điển hệ quản trị cơ sở dữ liệu. Vì vậy, lập kế hoạch
của một chiến lƣợc thực hiện là chính xác hơn tối ƣu truy vấn.





















1.1 Chuyển các truy vấn SQL thành đại số quan hệ
Một truy vấn SQL đầu tiên chuyển đổi thành một biểu thức đại số quan
hệ mở rộng tƣơng đƣơng, đƣợc biểu diễn nhƣ là cấu trúc dữ liệu cây truy vấn,
và sau đó đƣợc tối ƣu. Thông thƣờng các truy vấn SQL đƣợc phân tích thành
các khối truy vấn, tạo nên các đơn vị cơ sở mà có thể chuyển đổi thành những
Truy vấn viết trong ngôn ngữ bậc cao
Dạng biểu diễn bên trong
Scanning, parsing,
validating
Query Optimiser
Runtime Database
Processor
Query Code
Generator
Phương án thực hiện
Chương trình thực hiện truy vấn
Kết quả của truy vấn
Hình 1.1 Các bước điển hình khi xử lý một truy vấn bậc cao


6
phép toán đại số và đƣợc tối ƣu. Một khối truy vấn chứa một biểu thức
SELECT – FROM – WHERE đơn và có thể có các mệnh đề Group by và
Having nếu chúng là một phần của biểu thức. Vì vậy các truy vấn đƣợc lồng
bên trong một truy vấn đƣợc xác định nhƣ các khối truy vấn riêng rẽ. [6]
Xét các quan hệ sau: EMPLOYEE, DEPARTMENT, WORKS-ON và
PROJECT.






EMPLOYEE



FNAME
LNAME
SSN

BDATE
ADDESS
SEX
SALAR
Y
DNO


DEPARTMENT

DNAME
DNUMBER
MGRSSN
MGRSTARTDATE


PROJECT


PNAME
PNUMBER
PLOCATION
DNUM

WORKS-ON

ESSN
PNO
HOURS

Bảng 1.1 Các quan hệ


Trong đó:
Quan hệ EMPLOYEE chứa thuộc tính của các nhân viên:
FNAME: tên của các nhân viên
LNAME: họ và tên đệm của nhân viên
SSN: mã nhân viên
BDATE: ngày sinh của mỗi nhân viên
ADDESS: địa chỉ của nhân viên
SEX: giới tính của nhân viên
SALARY: mức lƣơng của từng nhân viên

7
DNO: mã số phòng ban mà nhân viên đó làm việc
Quan hệ DEPARTMENT chứa thông tin về các phòng ban:
DNAME: tên của mỗi phòng ban
DNUMBER: mã số của mỗi phòng ban

MGRSSN: mã số của ngƣời quản lý từng phòng
MGRSTARTDATE: ngày bắt đầu làm quản lý của ngƣời
quản lý phòng ban
Quan hệ PROJECT chứa thông tin về các dự án:
PNAME: tên của dự án
PNUMBER: mã số dự án
PLOCATION: nơi thực hiện dự án
DNUM: mã số của phòng thực hiện dự án
Quan hệ WORKS-ON chứa thông tin về thời gian làm việc của mỗi
nhân viên:
ESSN: mã số của nhân viên
PNO: mã số dự án mà nhân viên đó tham gia
HOURS: số giờ mà nhân viên đó thực hiện
Xét truy vấn SQL sau trên quan hệ EMPLOYEE trong bảng 1.1
SELECT LNAME, FNAME
FROM EMPLOYEE
WHERE SALARY > (SELECT MAX(SALARY)
FROM EMPLOYEE
WHERE DNO=5);
Truy vấn này chứa một truy vấn con lồng bên trong và vì vậy có thể
đƣợc tách thành 2 khối:
Khối trong là:
SELECT MAX (SALARY)
FROM EMPLOYEE
WHERE DNO=5

8
Và khối ngoài là:
SELECT LNAME, FNAME
FROM EMPLOYEE

WHERE SALARY > c
Với c biểu diễn kết quả do khối trong trả lại. Khối trong có thể đƣợc
chuyển thành biểu thức quan hệ mở rộng nhƣ sau:
F
MAX SALARY
(
DNO=5
(EMPLOYEE))
Và khối ngoài đƣợc chuyển sang biểu thức quan hệ nhƣ sau:

LNAME, FNAME
(
SALARY>C
(EMPLOYEE))
Sau đó bộ tối ƣu truy vấn sẽ chọn một phƣơng án thực hiện cho từng
khối. Chú ý rằng trong ví dụ ở trên khối trong chỉ cần thực hiện một lần để
đƣa ra lƣơng lớn nhất, sau đó khối ngoài sử dụng lƣơng lớn nhất này nhƣ là
hằng số c. Truy vấn đó gọi là truy vấn lồng nhau không liên kết. Việc tối ƣu
các truy vấn lồng nhau liên kết sẽ khó khăn hơn nhiều. [1, 5]

1.2 Các thuật toán cơ bản thực hiện phép toán truy vấn
Một hệ quản trị cơ sở dữ liệu (RDBMS) phải có các thuật toán để thực
hiện các kiểu phép toán quan hệ khác nhau có thể xuất hiện trong một chiến
lƣợc thực hiện truy vấn. Các phép toán bao gồm phép toán đại số quan hệ cơ
bản và mở rộng, hoặc là tổ hợp các phép toán này. Với mỗi phép toán (hoặc
một tổ hợp phép toán) nhƣ thế, thƣờng phải có sẵn một hoặc nhiều thuật toán
để thực hiện nó. [1, 5, 6, 8]
1.2.1 Sắp xếp ngoài
Sắp xếp là một trong các thuật toán cơ bản đƣợc sử dụng trong xử lý
truy vấn. Ví dụ, khi một truy vấn SQL chỉ ra một mệnh đề Order by, kết quả

truy vấn phải đƣợc sắp xếp. Sắp xếp cũng là một bộ phận then chốt trong các
thuật toán đƣợc sử dụng cho phép nối (Join) hoặc các phép toán khác nhƣ
phép hợp (Union), phép giao (Intersection) và trong các thuật toán loại bỏ bản

9
ghi trùng nhau đối với phép chiếu (Project) khi một truy vấn SQL chỉ ra tuỳ
chọn Distinct trong mệnh đề Select.
Sắp xếp ngoài đề cập đến các thuật toán sắp xếp phù hợp với các file
lớn đƣợc lƣu trữ trên đĩa mà không xếp vào bộ nhớ chính, ví dụ hầu hết các
file cơ sở dữ liệu. Thuật toán sắp xếp ngoài thƣờng sử dụng chiến lƣợc sắp
xếp trộn, nó bắt đầu bằng việc sắp xếp các file con nhỏ, gọi là các run, của file
chính và sau đó trộn các run đã đƣợc sắp xếp tạo nên các file con lớn hơn và
các file con đó lại đƣợc trộn với nhau. Giống nhƣ các thuật toán khác, thuật
toán sắp xếp trộn đòi hỏi một không gian phòng đợi (buffer space) trong bộ
nhớ chính, ở đó việc sắp xếp và trộn các run đƣợc thực hiện. Thuật toán cơ
bản đƣợc đƣa ra ở hình 1.2 gồm hai giai đoạn: (1) giai đoạn sắp xếp, (2) giai
đoạn trộn.
Trong giai đoạn sắp xếp, các run của file có thể đặt vừa vào bộ đệm có
sẵn sẽ đƣợc đọc vào trong bộ nhớ chính và đƣợc sắp xếp bằng cách dùng một
thuật toán sắp xếp trong rồi đƣợc ghi trở lại vào đĩa nhƣ các file con đƣợc sắp
xếp tạm thời. Kích cỡ của run và số lƣợng run ban đầu (n
R
) đƣợc chỉ ra bởi
các khối file (b) và không gian phòng đợi có sẵn (n
B
). Ví dụ: nếu n
B
=5 khối
và b=1024 khối thì n
R

=(b/n
B
) hoặc 205 run ban đầu. Mỗi run có cỡ 5 khối
(ngoại trừ run cuối cùng sẽ có 4 khối). Vì vậy, sau pha sắp xếp, 205 run đƣợc
sắp xếp nhƣ là một file con trên đĩa. [1,6]
set i  1;
j  b;
k  N ;
m  (j/k);
while (i <= m)
do {
read next k blocks of the file into the buffer or if
there are less than k blocks remaining, then read in
the remaining blocks;

10
sort the records in the buffer and write as a
temporary subfile;
i  i + 1 ;
}
set i  1 ;
p  log
k-1
m;
j  m;
while (j <=p )
do { n  1 ;
q  j/(k-1);
while (n <= q )
do {

read next k –1 subfiles or remaining subfiles
(from previous pass) one block at a time;
merge and write as new subfile;
n  n=1;
}
j  q;
i  i+1;
}
Hình 1.2 Phác thảo của thuật toán sắp xếp trộn cho sắp xếp ngoài
Trong giai đoạn trộn, các run đã sắp xếp đƣợc trộn trong một hoặc
nhiều đƣờng (pass). Mức độ trộn (d
M
) là số các run có thể đƣợc trộn với nhau
trong mỗi đƣờng. Trong mỗi đƣờng, cần một khối phòng đệm để lƣu các run
đã đƣợc trộn và cần một khối phòng đêm khác để lƣu kết quả trộn. Vì vậy d
M

là số nhỏ hơn trong (n
B
-1) và n
R
, số các pass là (log
dM
(n
R
)). Trong ví dụ
trên, d
M
=4 (trộn bốn đƣờng), nhƣ vậy 205 run đầu tiên sẽ đƣợc trộn thành 52


11
run ở cuối đoạn đầu tiên. Sau đó chƣơng trình trộn thành 13 run, tiếp đó thành
4 run và sau đó thành 1 file. Điều đó nghĩa là cần 4 pass. Cực tiểu d
M
của 2
cho thực hiện tồi nhất của thuật toán, đó là: (2*b)+(2*(b*(log
2
b))). Số hạng
đầu tiên biểu diễn số các khối truy cập đối với giai đoạn sắp xếp, bởi vì mỗi
khối đƣợc truy cập hai lần, một lần để đọc vào bộ nhớ và một lần để ghi các
bản ghi trở lại đĩa sau khi đã sắp xếp. Số hạng thứ hai biểu diễn số các khối
truy cập đối với giai đoạn trộn, với giả thiết trƣờng hợp xấu nhất d
M
của 2.
Nói chung, log lấy cơ số d
M
và biểu thức đối với số khối truy cập trở thành:
(2*b)+(2*(b*(log
d
M
b)))
1.2.2 Thực thi phép chọn (SELECT) [6, 8]
Có rất nhiều lựa chọn cho việc thực thi một phép toán SELECT. Trong
phần này, trình bầy một số thuật toán để thực thi phép SELECT. Để minh
hoạ, sử dụng các phép toán sau đƣợc chỉ ra trong cơ sở dữ liệu quan hệ của
bảng 1.1 ở trang 7
(OP1): 
SSN=‟123456789‟
(EMPLOYEE)
(OP2): 

DNUMBER>5
(DEPARTMENT)
(OP3): 
DNO=5
(EMPLOYEE)
(OP4): 
(DNO=5) AND (SALARY>3000) AND (SEX=‟F‟)
(EMPLOYEE)
(OP5): 
(ESSN=‟123456789‟) AND (PNO=10)
(WORK_ON)
Các phƣơng pháp tìm kiếm đối với phép chọn đơn giản:
Có nhiều phƣơng pháp tìm kiếm để chọn các bản ghi từ một file. Chúng
đƣợc biết đến nhƣ các bộ quét file để tìm kiếm và lấy ra các bản ghi thoả mãn
điều kiện chọn. Nếu thuật toán tìm kiếm đòi hỏi việc sử dụng chỉ số thì tìm
kiếm chỉ số đƣợc gọi là quét chỉ số. Các phƣơng pháp tìm kiếm sau đây (từ S1
đến S6) là các ví dụ về các phƣơng pháp tìm kiếm có thể đƣợc sử dụng để
thực hiện phép toán chọn.
S1: Tìm kiếm tuyến tính: lấy ra từng bản ghi trong file và kiểm tra xem
các giá trị thuộc tính của chúng có thoả mãn điều kiện chọn hay không.

12
S2: Tìm kiếm nhị phân: nếu điều kiện chọn đòi hỏi một phép so sánh
bằng trên thuộc tính khoá mà trên đó file đƣợc sắp xếp , thì tìm kiếm nhị phân
(hiệu quả hơn tìm kiếm tuyến tính) sẽ đƣợc sử dụng. Ví dụ trong OP1 nếu file
EMPLOYEE đƣợc sắp xếp thứ tự theo thuộc tính SSN.
S3: Sử dụng chỉ số sơ cấp: Nếu điều kiện chọn đòi hỏi một phép so
sánh bằng trên một thuộc tính khoá với chỉ số sơ cấp. Ví dụ trong OP1 nếu
file EMPLOYEE có SSN=„123456789‟ thì sử dụng chỉ số sơ cấp để lấy ra các
bản ghi. Chú ý rằng điều kiện này lấy ra nhiều nhất là một bản ghi.

S4: Sử dụng một chỉ số sơ cấp để lấy ra nhiều bản ghi: Nếu điều kiện
so sánh là >, >=, <, <= trên trƣờng khoá. Ví dụ: trong OP2 với file
DEPARTMENT lấy ra những bản ghi có DNUMBER>5 thì sử dụng chỉ số để
tìm bản ghi thoả mãn điều kiện bằng tƣơng ứng (DNUMBER=5), sau đó lấy
ra tất cả các bản ghi tiếp theo bản ghi đó trong một file đƣợc sắp xếp. Còn với
điều kiện DNUMBER<5, thì lấy ra tất cả các bản ghi đi trƣớc.
S5: Sử dụng một chỉ số nhóm để lấy ra nhiều bản ghi: Nếu điều kiện
chọn đòi hỏi một phép so sánh bằng trên thuộc tính không phải là khoá. Ví
dụ: DNO=5 trong OP3, hãy sử dụng chỉ số đó để lấy ra tất cả các bản ghi thoả
mãn điều kiện.
S6: Sử dụng chỉ số thứ cấp (B
+
-tree) trên một phép so sánh bằng:
Phƣơng pháp này có thể đƣợc sử dụng để lấy ra một bản ghi đơn nếu trƣờng
chỉ số là một khoá hoặc lấy ra nhiều bản ghi nếu trƣờng chỉ số không phải là
khoá. Phƣơng pháp này cũng có thể sử dụng đối với các phép so sánh liên
quan đến >, >=, <, <=.
Phƣơng pháp S1 áp dụng cho bất kỳ file nào, còn tất cả các phƣơng
pháp khác phụ thuộc vào có đƣờng dẫn truy cập thích hợp trên thuộc tính
đƣợc sử dụng trong điều kiện chọn. Phƣơng thức S4 và S6 có thể đƣợc sử
dụng để lấy ra các bản ghi trong một phạm vi nhất định, ví dụ
30000<=SALARY<=35000. Các truy vấn bao gồm các điều kiện nhƣ thế
đƣợc gọi là các truy vấn vùng.

13
Các phƣơng pháp tìm kiếm cho lựa chọn phức tạp: Nếu điều kiện của
phép SELECT là một điều kiện liên kết, tức là điều kiện đó đƣợc tạo thành từ
nhiều điều kiện đơn, kết nối với nhau bằng toán tử logic liên kết AND nhƣ
OP4, thì DBMS có thể sử dụng các phƣơng pháp sau đây để thực thi.
S7: Phép chọn có điều kiện liên kết sử dụng một chỉ số đơn: nếu một

thuộc tính đòi hỏi bất kỳ điều kiện đơn giản nào trong điều kiện liên kết mà có
một đƣờng dẫn truy cập cho phép sử dụng một trong các phƣơng thức từ S2
đến S6, thì hãy sử dụng điều kiện này để lấy ra các bản ghi và sau đó kiểm tra
xem mỗi bản ghi lấy ra đó có thoả mãn các điều kiện đơn còn lại trong điều
kiện liên kết hay không.
S8: Phép chọn có điều kiện liên kết sử dụng chỉ số phức hợp: Nếu hai
hay nhiều thuộc tính đòi hỏi so sánh bằng trong điều kiện liên kết và có tồn tại
một chỉ số phức hợp (hoặc cấu trúc băm) trên các trƣờng đƣợc tổ hợp, ví dụ:
nếu một chỉ số đƣợc tạo ra trên khoá phức (ESSN, PNO) của file
WORKS_ON trong OP5 thì có thể sử dụng chỉ số một cách trực tiếp.
S9: Phép chọn có điều kiện liên kết bằng phép giao của các con trỏ bản
ghi: Nếu các chỉ số thứ cấp (hoặc các đƣờng dẫn truy nhập khác) là có trong
điều kiện liên kết là đơn giản, và nếu các chỉ số đó chứa con trỏ bản ghi thì nó
đƣợc sử dụng để lấy ra tập con trỏ bản ghi thoả mãn điều kiện đơn. Giao của
các tập con trỏ bản ghi này sẽ trả lại các con trỏ bản ghi thoả mãn điều kiện
liên kết và đƣợc sử dụng để lấy ra các bản ghi một cách trực tiếp. Nếu chỉ có
một vài điều kiện có các chỉ số thứ cấp thì mỗi bản ghi đƣợc lấy ra sau đó sẽ
đƣợc kiểm tra xem nó có thoả mãn các điều kiện còn lại hay không.
Mỗi khi một điều kiện đơn đặc tả phép chọn, nhƣ là OP1, OP2 hoặc
OP3, thì chỉ có thể kiểm tra xem trong điều kiện đó có tồn tại một đƣờng dẫn
truy cập trên thuộc tính không. Nếu có tồn tại đƣờng dẫn thì phƣơng pháp
tƣơng ứng với đƣờng dẫn đó đƣợc sử dụng, ngƣợc lại phƣơng pháp tìm kiếm
tuyến tính S1 có thể đƣợc sử dụng. Sự tối ƣu hoá truy vấn đối với phép toán
Select là cần thiết, nhất là đối với những điều kiện lựa chọn hội và với bất kỳ
khi nào có nhiều hơn một thuộc tính đƣợc đòi hỏi trong điều kiện có đƣờng

14
dẫn. Bộ tối ƣu sẽ chọn đƣờng dẫn để lấy ra các bản ghi theo cách hiệu quả
nhất bằng cách ƣớc tính các chi phí khác nhau và lựa chọn phƣơng pháp có
ƣớc lƣợng chi phí tối thiểu.

Khi bộ truy vấn lựa chọn giữa nhiều điều kiện đơn trong điều kiện liên
kết, nó thƣờng xem xét tính lựa chọn của từng điều kiện. Tính lựa chọn (s)
đƣợc định nghĩa là tỉ số giữa số bản ghi thoả mãn điều kiện trên tổng số bản
ghi có trong file (hay quan hệ), và do đó giá trị này nằm giữa 0 và 1, nếu nhƣ
độ chọn lọc là 0 thì không có bản ghi nào thỏa mãn điều kiện và là 1 nếu tất
cả các bản ghi đều thoả mãn điều kiện. Mặc dù độ chọn lọc chính xác của tất
cả các điều kiện có thể không sẵn có, sự ƣớc lƣợng của độ chọn lọc đƣợc giữ
trong danh mục DBMS và đƣợc sử dụng bởi bộ lọc. Ví dụ, với điều kiện bằng
trên thuộc tính khoá của quan hệ r(R), s=1/|r(R)| với |r(R)| là bản ghi trong
quan hệ r(R). Với một điều kiện bằng trên thuộc tính có các giá trị phân biệt i,
s đƣợc ƣớc lƣợng bởi (|r(R)|/i)/(|r(R)|) hoặc l/i, giả sử các bản ghi đó đƣợc
phân bổ đều giữa các giá trị phân biệt. Cùng với giả thiết này, |r(R)|/i bản ghi
sẽ thoả mãn một điều kiện bằng trên thuộc tính này. Tổng quát, số các bản ghi
thoả mãn một điều kiện lựa chọn với độ chọn lọc s đƣợc ƣớc lƣợng là
|r(R)|)*s. Ƣớc lƣợng càng nhỏ thì độ thoả dụng càng cao.
So sánh phép chọn có điều kiện đơn và điều kiện liên kết (AND), hoặc
điều kiện tách rời (OR) (các điều kiện đơn giản đƣợc nối với nhau bởi toán tử
kết nối logic OR hoặc AND) thì phép chọn có điều kiện tách khó xử lý và tối
ƣu hơn. Ví dụ, xét OP4‟:
(OP4‟): 
(DNO=5)

OR (SALARY>3000) OR (SEX=‟F‟)
(EMPLOYEE)
Với một điều kiện nhƣ vậy thì một phép tối ƣu ít có thể đƣợc thực hiện
bởi vì tất cả các bản ghi thoả mãn điều kiện là hợp của các bản ghi thoả mãn
các điều kiện riêng lẻ. Do đó, nếu bất kỳ một điều kiện nào không có một
đƣờng dẫn truy nhập thì chúng ta buộc phải sử dụng cách tìm kiếm tuyến tính.
Nếu đƣờng dẫn truy nhập tồn tại trên từng điều kiện thì tối ƣu hoá lựa chọn
bằng cách lấy ra những bản ghi hoặc địa chỉ bản ghi thoả mãn điều kiện, và

sau đó áp dụng phép toán tập hợp để loại trừ bản ghi giống nhau.

15
1.2.3 Thực thi phép nối (JOIN)
Phép nối là một trong những phép toán tốn nhiều thời gian nhất trong
xử lý truy vấn. Rất nhiều phép nối bắt gặp trong các truy vấn là nối bằng
(EQUIJOIN) và nối tự nhiên (NATURAL JOIN). Trong chƣơng này, khi nói
nối có nghĩa là EQUIJOIN (hoặc NATURAL JOIN). Có nhiều cách để thực
thi một phép nối 2 chiều, đó là một phép nối trên 2 file. Các phép nối gồm
nhiều hơn 2 file đƣợc gọi là phép nối nhiều chiều. Trong phần này nói về các
kỹ thuật để thực thi phép nối 2 chiều.
Xét các thuật toán đối với phép nối có dạng:
R
A=B
S
Với A và B là các thuộc tính so sánh của R và S tƣơng ứng. Các
phƣơng pháp nối có thể đƣợc mở rộng thành một dạng nối tổng quát hơn. Bốn
kỹ thuật phổ biến nhất cho việc thực hiện một phép nối đƣợc minh hoạ bằng
các phép toán ví dụ sau:
(OP6): EMPLOYEE
DNO=DNUMBER
DEPARTMENT
(OP7): DEPARTMENT
MGRSSN=SSN
EMPLOYEE
Các phƣơng pháp để thực thi phép nối [1, 6]:
J1. Nối lặp lồng nhau: Với mỗi bản ghi t trong R (vòng lặp ngoài), lấy
ra tất cả các bản ghi s từ S (vòng lặp trong) và kiểm tra xem nếu 2 bản ghi đó
có thoả điều kiện nối t[A]=s[B] hay không.
J2. Nối lặp đơn: Nếu một chỉ số (hoặc một khoá băm) tồn tại với một

trong 2 thuộc tính nối, ví dụ là B của S, lấy ra từng bản ghi t trong R, tại một
thời điểm chỉ lấy ra 1 bản ghi (vòng lặp đơn), sau đó sử dụng cấu trúc truy
nhập để lấy ra tất cả các bản ghi tƣơng xứng s từ S thoả s[B]=t[A] một cách
trực tiếp.
J3. Sắp xếp trộn: Nếu các bản ghi của R và S đƣợc sắp xếp một cách
vật lý (có thứ tự) bởi giá trị của các thuộc tính nối A và B một cách riêng biệt,
khi đó có thể thực thi phép nối một hiệu quả. Cả 2 file đƣợc quét đồng thời




16
theo thứ tự của các thuộc tính nối và đối chiếu các bản ghi có cùng giá trị với
A và B. Nếu các file không đƣợc sắp xếp thì trƣớc tiên chúng đƣợc sắp xếp
bằng cách sử dụng các thuật toán sắp xếp ngoài. Trong phƣơng pháp này, các
cặp của các khối file đƣợc sao chép vào trong bộ đệm theo thứ tự và các bản
ghi của từng file đó chỉ đƣợc quét một lần để đối chiếu với file khác trừ khi cả
A và B không là các thuộc tính khoá, trong trƣờng hợp này thì phƣơng pháp
cần phải đƣợc sửa đổi phù hợp. Phác hoạ của thuật toán sắp xếp trộn đƣợc
đƣa ra trong hình 1.3(a). R(i) đƣợc sử dụng để chỉ bản ghi thứ i trong R. Sự
khác nhau của sắp xếp trộn khi sử dụng các chỉ số thứ cấp tồn tại trên cả 2
thuộc tính nối. Các chỉ số cung cấp khả năng quét các bản ghi theo thứ tự của
các thuộc tính nối, nhƣng bản thân các bản ghi lại nằm rải rác trên toàn bộ các
khối file, vì vậy phƣơng pháp này tỏ ra khá kém hiệu quả, bởi vì truy nhập
vào các bản ghi có thể bao hàm việc truy cập đến một khối đĩa khác.

(a) sort the tuples in R on attribute A; (assume R has n tuples (records))
sort the tuples in S on attribute B; (assume S has m tuples (records))
set i  1, j 1;
while ( i


n) and (j

m)
do{ if R(i)
 
A
> S(j)
 
B
then set j  j +1
elseif R(i)
 
A
< S(j)
 
B
then set i i +1
else { (*R(i)
 
A
= S(j)
 
B
, so we output a matched tuple*)
output the combined tuple < R(i), S(j)> to T;
(* output other tuples that match R(i),if any*)
set l j +1;
while (l m) and (R(i)[A] = S(j)[B])
do { output the combined tuple < R(i), S(l)> to T;

set l  l + 1
}

17
(* output other tuples that match S(i),if any*)
set k  i + 1;
while( k

n) and (R(k)
 
A
= S(j)
 
B

do { output the combined tuple < R(k), S (j)> to T;
set k  k + 1
}
set i  k, j  l
}
}
(b) create a tuple t [ <attribute list>] in T‟ for each tuple t in R;
(* T‟ contains the projection result before duplicate elimination*)
if <attribute list> includes a key of R then T  T‟
else { sort the tuples in T‟;
set i 1, j 2;
while i  n do
{ output the tuple T‟(i) to T;
while T‟[i] = T‟[j] and j


n do j  j + 1; (*eliminate
duplicates*)
i  j; j  i +1
}
}
(* T conntains the projeclion result after duplicate elimination*)
Hình 1.3. Thực thi phép toán JOIN, PROJECT, UNION, INTERSECTION và
SET DIFFERENCE sử dụng sắp xếp trộn với R có n bộ giá trị và S có m bộ giá
trị (a) Thực thi phép toán T

R
A=B
S, (b) thực thi phép T



<attribute list>
(R)
J4. Nối băm (hash join): Các bản ghi của các file S và R đều đƣợc băm
vào 1 file băm nhƣ nhau, sử dụng cùng hàm băm nhƣ nhau trên các thuộc tính


18
nối A của R và B của S nhƣ là các khoá băm. Đầu tiên, một lần truy cập qua
file có số bản ghi ít hơn (ví dụ là R) băm các bản ghi của nó vào file băm;
công việc đó đƣợc gọi là pha phân mảnh bởi vì các bản ghi của R đƣợc phân
mảnh vào trong vùng băm. Pha tiếp theo đƣợc gọi là pha tham dò, một lần
truy cập qua file khác (file S) và băm từng bản ghi của S để thăm dò vùng
tƣơng ứng và các bản ghi trên đƣợc kết hợp với tất cả các bản ghi tƣơng xứng
từ R trong vùng đó.

(c). sort the tuples in R and S using the same unique sort attribules;
set i  1, j  1;
while( i <= n) and(j <= m)
do { if R(i) > S(j) then { output S(j) to T;
set j  j+1;
}
elseif R(i) < S(j) then { output R(i) to T;
set i  i+1
}
else set j  j+1;
}
if (i <= n) then add tuples R(i) to R(n) to T;
if (j <= m) then add tuples s(J) to S(m) to T;

(d) sort the tuples in R and R using the same unique sort attribules;
set i  1; j  1;
while( i <= n) and (j <= m)
do { if R (i)>S(j) then set j <- j+1
elseif R(i) < S(j) then set i<-i+1
else { output R(i) to T;
Set i  i+1,j  j+1
}
}
(e). Sort the tuples in R and S using the same unique sort attribules;
Set i  1, j  1;
While ( i <= n) and (j <= m)

19
Do { if R(i)>S(j) then set j  j + 1
elseif R(i) < S(j) then { output R(i) to T

set i  i+1
}
else set i  i+1, j  j+1
}
If (i<=n) then add tuplessR(i) to R(n) to T;

Hình 1.3 Thực thi phép JOIN, PROJECT, UNION, INTERSECTION và SET
DIFFERENCE sử dụng sắp xếp trộn với R có n bộ giá trị và S có m bộ giá trị.
(c) Thực thi phép toán T

R

S.
(d) Thực thi phép T

R

S.
(e) Thực thi phép T

R – S

Trên thực tế, các kỹ thuật J1 đến J4 đƣợc thực hiện bằng việc truy cập
đến toàn bộ các khối đĩa của file hơn là các bản ghi riêng lẻ. Phụ thuộc vào
không gian bộ đệm sẵn sàng trong bộ nhớ mà số các khối đƣợc đọc từ một
file có thể đƣợc điều chỉnh.
Trong phép nối lặp lồng nhau, nó tạo ra một sự khác nhau giữa file
đƣợc chọn cho vòng lặp ngoài và file đƣợc chọn cho vòng lặp trong. Nếu
EMPLOYEE đƣợc sử dụng cho vòng lặp ngoài, mỗi khối của EMPLOYEE
đƣợc đọc một lần và bản thân file DEPARTMENT (với từng khối của nó)

đƣợc đọc 1 lần cho mỗi lần lặp ứng với (n
B
-2) khối của file EMPLOYEE. Kết
quả là thu đƣợc công thức sau [6]:
Tổng số lần truy cập khối cho file ngoài = b
E

Số lần truy cập của (n
B
-2) khối đối với vòng lặp ngoài = (b
E
/(n
B
-2)
Tổng số lần truy cập khối cho file trong là = b
D
*(b
E
/(n
B
-2)
Do đó tổng số các lần truy cập khối đƣợc tính theo công thức sau:
b
E
+ ((b
E
/(n
B
-2)*b
D

) = 2000 + ((2000/5)*10) = 6000 lần truy cập
khối

20
Mặt khác, nếu sử dụng các bản ghi DEPARTMENT trong vòng lặp
ngoài, theo tính đối xứng thì thu đƣợc tổng số lần truy cập khối là:
b
D
+ ((b
D
/(n
B
-2) * b
E
) = 10 + (10/5) *2000)=4010 lần truy cập khối
Thuật toán nối sử dụng một bộ đệm để lƣu các bản ghi đƣợc nối của
file kết quả. Mỗi khi bộ đệm đầy, nó sẽ đƣợc viết vào trong đĩa để sử dụng lại.
Nếu file kết quả của phép nối có b
RES
khối đĩa, mỗi một khối sẽ đƣợc viết một
lần, do đó truy cập khối b
RES
nên đƣợc thêm trƣớc vào công thức để ƣớc
lƣợng giá của phép nối.
Có những nhân tố khác ảnh hƣởng đến sự thực hiện của một phép nối,
đặc biệt phƣơng pháp nối lặp đơn J2 đó là tỉ lệ phần trăm của các bản ghi
trong một file sẽ đƣợc nối với các bản ghi trong file khác. Điều đó gọi là nhân
tố lựa chọn nối của một file có điều kiện EQUIJOIN với file khác. Nhân tố
này phụ thuộc vào điều kiện nối bằng cụ thể giữa 2 file. Để giải thích cho điều
này, xét OP7: nối mỗi bản ghi của file DEPARTMENT với bản ghi của file

EMPLOYEE cho nhà quản lý của từng phòng ban đó. Ở đây, mỗi bản ghi
DEPARTMENT (có 50 bản ghi) đƣợc chờ để nối với từng bản ghi đơn
EMPLOYEE, nhƣng rất nhiều bản ghi EMPLOYEE (4950 bản ghi không
phải là ngƣời quản lý phòng ban) sẽ không đƣợc nối.
Giả sử rằng các chỉ số thứ cấp tồn tại trên các thuộc tính SSN của
EMPLOYEE và MGRSSN của DEPARTMENT với số mức chỉ số x
SSN
=4 và
x
MGRSSN
=2.
Khi đó có 2 lựa chọn để thực hiện phƣơng pháp J2. Đầu tiên là việc lấy
ra từng bản ghi EMPLOYEE và sử dụng chỉ số trên MGRSSN của
DEPARTMENT để thìm ra các bản ghi trong DEPARTMENT tƣơng xứng.
Trong trƣờng hợp này, không có bản ghi nào tƣơng xứng đƣợc tìm thấy cho
các nhân viên không quản lý một phòng ban nào cả.
Số lần truy cập khối cho trƣờng hợp này xấp xỉ:
b
E
+ (r
E
*(x
MGRSSN
+1))=2000 + (5000*3) = 17000 lần truy cập khối

21
Lựa chọn thứ 2 là lấy ra từng bản ghi DEPARTMENT và sau đó sử
dụng chỉ số trên SSN của EMPLOYEE để tìm ra bản ghi EMPOYEE quản lý
tƣơng xứng. Trong trƣờng hợp này, mỗi bản ghi DEPARTMENT sẽ cho một
bản ghi EMPOYEE tƣơng xứng. Số lần truy cập khối cho trƣờng hợp này xấp

xỉ là:
b
D
+ (r
D
*(x
SSN
+1))=10+(50*5)=260 lần truy cập khối.
Lựa chọn thứ 2 hiệu quả hơn bởi vì nhân tố chọn nối của
DEPARTMENT đối với điều kiện nối SSN=MGRSSN là 1, trong khi nhân tố
chọn nối của EMPLOYEE với điều kiện là (50/5000) hoặc 0.01. Với phƣơng
pháp J2, hoặc file nhỏ hơn hoặc file có sự tƣơng xứng với từng bản ghi (đó là
file với nhân tố chọn nối cao) nên đƣợc sử dụng trong nối lặp ngoài. Có thể
tạo một chỉ số đặc biệt cho việc thực hiện phép nối nếu nhƣ chƣa có chỉ số
nào tồn tại.
Sắp xếp trộn J3 là hiệu quả nếu các file đã đƣợc sắp xếp bởi thuộc tính
nối của chúng. Do đó, số các khối đƣợc truy nhập bằng tổng các khối trong cả
2 file. Với phƣơng pháp này cả OP6 và OP7 sẽ cần b
E
+ b
D
=2000 +10 =2010
lần truy cập khối. Tuy nhiên, cả 2 file này đƣợc sắp xếp theo các thuộc tính
nối; nếu một hoặc 2 file chƣa đƣợc sắp xếp thì chúng cần phải đƣợc sắp xếp
cho việc thực thi phép nối. Nếu ƣớc lƣợng giá của việc sắp xếp một file ngoài
là (blog
2
b) lần truy cập khối và nếu cả 2 file cần đƣợc sắp xếp thì tổng giá của
phép sắp xếp trộn có thể ƣớc lƣợng bởi (b
E

+ b
D
+ b
E
log
2
b
E
+ b
D
log
2
b
D
).
1.2.4 Thực thi phép chiếu và các phép toán tập hợp
Một phép chiếu 
<danh sách thuộc tính>
(R) dễ thực thi nếu <danh sách thuộc
tính> bao gồm một khoá của quan hệ R, bởi vì trong trƣờng hợp này kết quả
của thao tác sẽ có số bản ghi cùng số bản ghi của R nhƣng chỉ có các giá trị
trong <danh sách thuộc tính>. Nếu <danh sách thuộc tính> không chứa một
khoá của R, các bộ giá trị trùng lặp phải đƣợc loại trừ. Việc này thông thƣờng
đƣợc thực hiện bằng việc sắp xếp kết quả của phép toán và sau đó loại trừ các
bộ giá trị trùng lặp xuất hiện liên tiếp sau khi sắp xếp. Một phác hoạ của thuật
toán đƣợc đƣa ra trong hình 1.3(b). Việc băm có thể cũng đƣợc sử dụng để

22
loại trừ trùng lặp: bởi từng bản ghi đƣợc băm và chèn vào một khối của file
băm trong bộ nhớ, file băm đƣợc kiểm tra lại xem bản ghi đã có trong vùng

đó chƣa, nếu có rồi thì sẽ không chèn vào nữa. File băm có ích đối với truy
vấn SQL với mặc định không loại trừ các bản ghi trùng nhau trong kết quả
truy vấn; chỉ nếu từ khoá DISTINCT đƣợc đƣa vào trong câu truy vấn thì các
bộ giá trị trùng lặp mới đƣợc loại bỏ khỏi kết quả của câu truy vấn.
Các phép toán tập hợp – UNION (hợp), INTERSECTION (giao), SET
DIFFERENCE (trừ) và CARTESIAN PRODUCT (tích Đề Các) thực thi đôi
lúc khá tốn kém. Đặc biệt phép tích Đề Các RxS rất tốn kém bởi kết quả của
nó bao gồm số rất lớn các bản ghi (từng bản ghi của R kết hợp với tất cả các
bản ghi của S). Thêm vào đó các thuộc tính của kết quả bao gồm tất cả các
thuộc tính của R và S. Nếu R có n bản ghi và j thuộc tính, S có m bản ghi và k
thuộc tính, quan hệ kết quả sẽ có n*m bản ghi và j+k thuộc tính. Do đó, tránh
phép toán tích Đề Các và thay thế bằng các phép toán khác tƣơng đƣơng trong
khi tối ƣu truy vấn là rất quan trọng [5].
Ba phép toán quan hệ - hợp, giao, trừ - chỉ áp dụng với các quan hệ
tƣơng thích nhau, các quan hệ có cùng số thuộc tính và cùng miền thuộc tính.
Cách thông thƣờng để thực thi các phép toán này là sử dụng sự thay đổi của
kỹ thuật sắp xếp trộn: 2 quan hệ đƣợc sắp trên cùng các thuộc tính, và sau khi
sắp xếp thì chỉ một lần quét qua từng quan hệ là đủ để đƣa ra kết quả. Ví dụ
thực thi phép toán hợp, R  S, bằng việc quét và trộn các file đồng thời, và
nếu có bộ giá trị nhƣ nhau tồn tại trong cả 2 quan hệ thì chỉ một bộ đƣợc giữ
lại trong kết quả trộn. Với phép toán giao, R  S, thì chỉ giữ trong kết quả
trộn những bộ kết quả nào có mặt trong cả 2 quan hệ R và S. Hình 1.3(c) đến
(e) là phác hoạ của việc thực thi các phép toán này bằng việc sắp xếp và trộn.
Nếu nhƣ sắp xếp đƣợc thực hiện trên các thuộc tính khoá duy nhất, các phép
toán này sẽ đơn giản hơn.
Trộn file cũng đƣợc sử dụng để thực hiện phép hợp, giao và trừ. Một
bảng đƣợc phân mảnh và bảng khác đƣợc sử dụng để thăm dò mảnh tƣơng
ứng. Ví dụ, để thực thi phép RS thì đầu tiên phân mảnh các bản ghi của R

23

và sau đó băm các bản ghi của S, nhƣng chỉ chèn các bản ghi giống nhau vào
trong bộ nhớ. Để thực thi R  S, đầu tiên phân mảnh các bản ghi của R vào
trong một file băm. Sau đó, trong khi băm từng bản ghi của S, thăm dò và
kiểm tra nếu chính bản ghi từ S đƣợc tìm thấy trong vùng nhớ thì thêm bản
ghi đó vào file kết quả. Để thực thi R – S, đầu tiên băm các bản ghi của R vào
trong vùng nhớ. Trong khi băm từng bản ghi của S, nếu đúng bản ghi đó tìm
thấy trong vùng nhớ thì xoá bản ghi khỏi vùng nhớ.
1.2.5 Thực thi các phép toán kết hợp
Các phép toán kết hợp (MIN, MAX, COUNT, AVERAGE, SUM) khi
áp dụng vào bảng thì có thể đƣợc thực hiện bởi một lần quét bảng hoặc bằng
việc sử dụng một chỉ số thích hợp nếu có. Ví dụ xét truy vấn sau:
SELECT MAX(SALARY)
FROM EMPLOYEE;
Nếu một chỉ số (tăng dần) trên SALARY tồn tại cho quan hệ
EMPLOYEE thì bộ tối ƣu có thể chọn việc sử dụng chỉ số để tìm kiếm giá trị
lớn nhất theo con trỏ phải nhất. Nút đó chứa giá trị lƣơng lớn nhất. Trong hầu
hết các trƣờng hợp, cách này có hiệu quả hơn so với việc quét toàn bộ bảng
của EMPLOYEE, bởi không có bản ghi chính xác đƣợc lấy ra. Phép toán
MIN thực hiện tƣơng tự, và con trỏ trái nhất đƣợc lấy ra. Nút đó chứa giá trị
lƣơng nhỏ nhất.
Khi mệnh đề GROUP BY đƣợc sử dụng trong truy vấn, phép toán kết
hợp phải đƣợc áp dụng cho từng nhóm của các bộ giá trị. Do đó, bảng đầu
tiên phải đƣợc phân mảnh thành các tập con các bộ giá trị, ở đó mỗi mảnh có
cùng giá trị đối với các thuộc tính nhóm. Trong trƣờng hợp này việc tính toán
trở nên phức tạp hơn. Xét truy vấn sau:
SELECT DNO, AVR(SALARY)
FROM EMPLOYEE
GROUP BY DNO;

24

Kỹ thuật thông thƣờng cho các truy vấn nhƣ thế này là đầu tiên sắp xếp
hoặc băm trên các thuộc tính nhóm để phân mảnh file vào trong các nhóm
thích hợp. Sau đó thuật toán sẽ tính toán hàm kết hợp cho các bộ giá trị trong
từng nhóm, các bộ giá trị này có giá trị chung trong thuộc tính nhóm. Trong
truy vấn ví dụ trên, tập hợp của các bộ giá trị cho từng số phòng ban đƣợc
nhóm lại với nhau vào một mảnh và tính toán giá trị trung bình cho từng
nhóm.
Chú ý rằng nếu một chỉ số nhóm tồn tại trên các thuộc tính nhóm thì
các bản ghi đã đƣợc phân mảnh vào trong các tập con tƣơng ứng. Trong
trƣờng hợp này nó chỉ cần thiết áp để áp dụng việc tính toán cho từng nhóm.
1.2.6 Thực thi phép nối ngoài - Outer Join
Phép nối ngoài có 3 tham số: nối ngoài phải, nối ngoài trái và nối ngoài
tổng hợp. Dƣới đây là một ví dụ của phép nối ngoài trái trong SQL2:
SELECT LNAME, FNAME, DNAME
FROM (EMPLOYEE LEFT OUTER JOIN DEPARTMENT ON
DNO=DNUMBER);
Kết quả của truy vấn này là một bảng với tên của nhân viên và các
phòng ban phụ trách của họ. Nó tƣơng tự kết quả nối thông thƣờng (nối
trong), ngoại trừ trƣờng hợp là: nếu một bộ giá trị EMPLOYEE (một bộ giá
trị trong quan hệ trái) không có một phòng ban nào phụ trách thì tên của nhân
viên vẫn xuất hiện trong bảng kết quả nhƣng tên phòng ban sẽ có giá trị null
với các bộ giá trị nhƣ thế trong kết quả truy vấn [6].
Nối ngoài có thể đƣợc tính toán bằng việc sửa một trong các thuật toán
nối nhƣ nối lặp lồng nhau hoặc nối lặp đơn. Ví dụ, để tính toán một phép nối
ngoài trái, khi đó sử dụng quan hệ bên trái cho vòng lặp ngoài hoặc lặp đơn
bởi vì mọi bộ giá trị trong quan hệ trái phải có trong kết quả. Nếu có các bộ
giá trị tƣơng xứng trong quan hệ kia thì các bộ giá trị để nối đó đƣợc đƣa ra
và lƣu trong kết quả. Tuy nhiên, nếu không tìm thấy bộ giá trị nào của quan
hệ kia thì bộ giá trị trong quan hệ trái vẫn đƣợc đƣa vào kết quả nhƣng đƣợc

×