Nếu trường có thứ tự không phải là trường khóa, nghĩa là nếu vô số bản ghi trong file có thể có cùng giá trị đối với trường này, thì một loại chỉ mục khác, được gọi là chỉ mục cụm có th
Trang 1MỤC LỤC
Trang 21 Các loại chỉ mục đã được sắp xếp đơn mức
kiếm một chỉ mục để tìm ra một danh sách địa chỉ(trong trường
hợp này là số trang) và sử dụng những địa chỉ này định vị một mục trong sách bằng cách tìm kiếm những trang đã xác định Có thể thấy rằng, nếu không có hướng dẫn được đưa ra thì chúng ta sẽ phải duyệt rất chậm từng từ một trong toàn bộ cuốn sách để tìm
ra mục mà chúng ta quan tâm; điều này cũng tương ứng với việc thực hiện một phép tìm kiếm tuyến tính trên một file Tất nhiên, hầu hết các cuốn sách đều có các thông tin bổ sung, chẳng hạn như chương và tiêu đề từng phần, giúp chúng ta tìm ra một mục mà không phải tìm trên toàn bộ cuốn sách Tuy nhiên, chỉ mục là việc chỉ định chính xác của mỗi mục xuất hiện trong cuốn sách.
3. Đối với file có cấu trúc bản ghi chứa một số trường (hoặc thuộc tính), một cấu trúc truy xuất chỉ mục thường được định nghĩa trên một trường đơn giản của một file, được gọi là một
trường chỉ mục (hoặc thuộc tính chỉ mục) Chỉ mục thường lưu
trữ mỗi giá trị của trường chỉ mục cùng với một danh sách các con trỏ trỏ đến tất cả các khối đĩa chứa các bản ghi với giá trị của trường đó Các giá trị trong chỉ mục được sắp thứ tự, vì vậy chúng
ta có thể thực hiện kiểu tìm kiếm nhị phân trên chỉ mục File chỉ mục nhỏ hơn nhiều so với file dữ liệu, vì vậy quá trình tìm kiếm chỉ mục sử dụng một tìm kiếm nhị phân là khá hiệu quả
4. 1.2 Một số loại chỉ mục được sắp xếp
5. Có một số loại “chỉ mục được sắp xếp” Một chỉ mục sơ
cấp (primary index) được xác định trên trường khóa có thứ tự
(ordering key field) của một file các bản ghi đã được sắp xếp Một trường khóa có thứ tự được sử dụng đối với các bản ghi của một file theo thứ tự vật lý trên đĩa, và mỗi bản ghi có một giá trị duy
Trang 3nhất cho trường đó Nếu trường có thứ tự không phải là trường khóa, nghĩa là nếu vô số bản ghi trong file có thể có cùng giá trị đối
với trường này, thì một loại chỉ mục khác, được gọi là chỉ mục
cụm có thể được sử dụng Chú ý rằng một file có thể có nhiều nhất
một trường có thứ tự vật lý, do đó nó có thể có nhiều nhất một khóa chính hoặc một chỉ mục cụm, mà không phải là cả hai Một
loại chỉ mục thứ ba, được gọi là chỉ mục thứ cấp, có thể xác định
trên bất kỳ trường không có thứ tự nào đó của một file Một file có thể có một số chỉ mục thứ cấp bổ sung vào cho phương pháp truy xuất sơ cấp của nó Chúng ta sẽ nghiên cứu những loại chỉ mục đơn mức này cụ thể hơn.
1.2.1 Chỉ mục sơ cấp
6. Chỉ mục sơ cấp là một file đã được sắp xếp mà các
bản ghi của nó có chiều dài cố định với hai trường Trường đầu tiên có cùng kiểu dữ liệu như trường khóa có thứ tự - được gọi là
khóa chính (primary key) của file dữ liệu, và trường thứ hai là
một con trỏ trỏ đến một khối đĩa (địa chỉ khối) Có một đầu vào
chỉ mục – index entry (hoặc bản ghi chỉ mục – index record)
trong file chỉ mục cho mỗi khối trong file dữ liệu Mỗi đầu vào chỉ
mục có giá trị khóa chính là giá trị trường khóa chính (primary
key field) của bản ghi đầu tiên trong một khối và một con trỏ trỏ đến khối đó như hai trường giá trị của nó Chúng ta gọi hai giá trị trường của đầu vào chỉ mục i là <K(i), P(i)>.
7. Để tạo ra một chỉ mục trên file đã sắp xếp (như trong Hình 1), chúng ta sử dụng trường Name như là khóa chính, bởi vì
đó là trường khóa có thứ tự của file (giả sử rằng mỗi giá trị của Name là duy nhất) Mỗi đầu vào trong chỉ mục có một giá trị Name và một con trỏ Ba đầu vào chỉ mục đầu tiên được chỉ ra như sau:
8. <K(1) = (Aaron, ED), P(1) = địa chỉ của khối 1>
9. <K(2) = (Adams, John), P(2) = địa chỉ của khối 2>
10. <K(3) = (Alexander, Ed), P(3) = địa chỉ của khối 3>
Trang 411. Hình 1 sẽ minh họa cho chỉ mục sơ cấp này Tổng số các đầu vào trong chỉ mục là giống như số các khối đĩa trong file
dữ liệu đã sắp xếp Bản ghi đầu tiên trong mỗi khối của file dữ liệu
được gọi là bản ghi gốc (anchor record) của khối, thường gọi là
block anchor.
12.
Trang 513.
Trang 614. Hình 1 Chỉ mục sơ cấp trên trường khóa có thứ tự của file
Employee
15. Các chỉ mục có thể dày đặc hoặc thưa Một chỉ mục
dày đặc có một đầu vào chỉ mục cho mỗi giá trị khóa tìm kiếm
trong file dữ liệu Trong khi đó, một chỉ mục thưa (hoặc không
dày đặc), chỉ có các đầu vào chỉ mục cho một số các giá trị tìm kiếm Vì vậy, một chỉ mục sơ cấp là chỉ mục không dày đặc (thưa), bởi vì nó thường bao gồm một đầu vào cho mỗi khối đĩa của file dữ liệu và cho các khóa của bản ghi gốc thay vì là một đầu vào cho mỗi giá trị tìm kiếm (hoặc mỗi bản ghi)
Bàn về vấn đề thời gian truy xuất khối trong file chỉ mục sơ cấp:
16. File chỉ mục cho một chỉ mục sơ cấp cần ít khối hơn so với file dữ liệu thông thường bởi 2 lý do sau Thứ nhất, số đầu vào chỉ mục ít hơn so với số bản ghi trong file dữ liệu Thứ hai, mỗi đầu vào chỉ mục thường có kích thước nhỏ hơn so với một bản ghi dữ liệu bởi vì nó chỉ có 2 trường; do đó, sẽ có nhiều các đầu vào chỉ mục hơn so với các bản ghi dữ liệu có thể đặt vào trong một khối
Vì vậy, một tìm kiếm nhị phân trên file chỉ mục đòi hỏi ít truy xuất khối hơn so với một tìm kiếm nhị phân trên file dữ liệu Chú ý rằng tìm kiếm nhị phân cho một file dữ liệu đã sắp xếp yêu cầu log 2 b truy xuất khối Nhưng nếu với file có chỉ mục sơ cấp chỉ chứa b i
khối, thì để định vị một bản ghi với một giá trị tìm kiếm phải yêu cầu một kiếm nhị phân của chỉ mục đó và truy xuất đến khối có chứa bản ghi đó: tổng cộng có log 2 b i + 1 truy xuất.
17. Một bản ghi mà giá trị khóa chính là K nằm trong khối
có địa chỉ là P(i), trong đó K(i) ≤ K < K(i+1) Khối thứ i trong file dữ liệu sẽ chứa tất cả các bản ghi như thế do thứ tự vật lý của các bản ghi file trên trường khóa chính Để thu được một bản ghi, với giá trị K của trường khóa chính đã biết, thì chúng ta sẽ thực hiện một phép tìm kiếm nhị phân trên file chỉ mục để tìm ra đầu vào chỉ mục thích hợp i, và sau đó thu được khối file dữ liệu mà địa chỉ của nó
là P(i) Ví dụ 1 minh họa việc lưu trữ trong một truy xuất khối có
Trang 7thể thu được khi một chỉ mục sơ cấp được sử dụng để tìm kiếm một bản ghi.
18. Ví dụ 1 Giả sử rằng chúng ta có một file đã sắp xếp với r =
30,000 bản ghi được lưu trong đĩa với kích thước khối là B = 1024 bytes Những bản ghi của file này có kích thước cố định và không
được thay đổi, với chiều dài của bản ghi là R = 100 bytes Hệ số
tạo khối (blocking factor) cho file sẽ là bfr = (B/R) =
(1024/100)= 10 bản ghi cho mỗi khối Số các khối cần cho file là
b = (r/bfr) = (30,000/10) = 3000 khối Một tìm kiếm nhị phân trên file dữ liệu sẽ cần khoảng log 2 b = log 2 3000 = 12 truy xuất khối.
19. Bây giờ giả sử rằng trường khóa có thứ tự của một file là V có chiều dài là 9 bytes, một con trỏ khối là P có chiều dài là
6 bytes, và chúng ta đã xây dựng một chỉ mục sơ cấp cho file Kích thước của mỗi đầu vào chỉ mục là R i = (9 + 6) = 15 bytes, vì vậy hệ
số tạo khối cho chỉ mục là bfr i = (B/R i ) = (1024/15) = 68 đầu vào cho mỗi khối Tổng số các đầu vào chỉ mục r i bằng số các khối trong file dữ liệu, tức là 3000 khối Vì vậy, số các khối chỉ mục b i =
(ri /bfr i ) = (3000/68) = 45 khối Để thực hiện một tìm kiếm nhị phân trên file chỉ mục, thì sẽ cần (log 2 b i ) = log 2 45 = 6 truy xuất khối Để tìm một bản ghi bằng cách sử dụng chỉ mục, chúng ta cần một truy xuất khối bổ sung đến file dữ liệu với tổng số là 6 +1 = 7 truy xuất khối – một cải tiến so với kiểu tìm kiếm nhị phân trên file
dữ liệu (yêu cầu 12 truy xuất khối).
1.2.2 Chỉ mục cụm
20. Nếu các bản ghi file đã được sắp theo thứ tự vật lý trên một trường không khóa(không có một giá trị phân biệt nào
cho mỗi bản ghi) thì trường đó được gọi là trường phân cụm
(clustering field) Chúng ta có thể tạo ra một loại chỉ mục khác,
được gọi là chỉ mục cụm, để tăng tốc độ truy lục của các bản ghi
có cùng giá trị cho trường phân cụm Loại chỉ mục này khác với
Trang 8chỉ mục sơ cấp (yêu cầu trường có thứ tự của file dữ liệu phải có một giá trị phân biệt cho mỗi bản ghi)
21. Một file chỉ mục cụm, giống như file chỉ mục sơ cấp, cũng có hai trường Trường thứ nhất chứa các giá trị phân biệt của trường phân cụm, và trường thứ hai chứa các con trỏ khối Con trỏ khối sẽ trỏ đến khối đầu tiên trong file dữ liệu có một bản ghi với giá trị bằng giá trị trong trường phân cụm đó Hình 2 minh họa cho một file chỉ mục cụm Chú ý rằng việc chèn và xóa bản ghi vẫn là nguyên nhân nảy sinh các vấn đề bởi vì các bản ghi dữ liệu
đã được sắp theo thứ tự vật lý Để giảm bớt những hạn chế trong vấn đề chèn bản ghi, thông thường dành riêng một khối (hoặc một nhóm các khối liền nhau) cho mỗi giá trị của trường phân cụm; tất
cả các bản ghi với giá trị đó đặt vào trong khối (hoặc nhóm khối) Điều này làm cho việc chèn và xóa các bản ghi có thể dễ dàng thực hiện hơn Hình 3 sẽ chỉ ra điều này
Trang 923. Hình 2 Một chỉ mục cụm trên trường Dept_number không
khóa có thứ tự của file EMPLOYEE
24. Chỉ mục cụm là một mô hình khác của chỉ mục không dày đặc bởi vì nó có một đầu vào cho mỗi giá trị riêng biệt của file chỉ mục, mà nó không phải là khóa bởi vì nó có giá trị trùng nhau trên mỗi bản ghi trong file
Trang 1025.
Trang 1126.
Trang 1227. Hình 3 Chỉ mục cụm với một cụm khối riêng biệt cho mỗi
nhóm của các bản ghi chia xẻ cùng một giá trị cho trường phân
cụm
Trang 131.2.3 Chỉ mục thứ cấp
28. Chỉ mục thứ cấp cung cấp phương tiện để truy xuất
một file thay cho một truy xuất sơ cấp nào đó đã tồn tại Các chỉ mục thứ cấp không yêu cầu file dữ liệu phải được sắp xếp trên trường chỉ mục Chúng có thể được tạo ra trên các trường khóa hoặc trường không khóa Chỉ mục là một file đã được sắp xếp với 2 trường Trường đầu tiên có cùng kiểu dữ liệu với trường không có
thứ tự của file dữ liệu, đó là trường chỉ mục Trường thứ hai hoặc là con trỏ khối hoặc con trỏ bản ghi Có thể có rất nhiều chỉ
mục thứ cấp cho cùng một file.
a. Chỉ mục thứ cấp trên trường khóa
29. Đầu tiên, chúng ta xét một cấu trúc truy xuất chỉ mục thứ cấp trên một trường khóa có giá trị phân biệt với mỗi bản ghi Trường khóa trên một chỉ mục thứ cấp được tạo ra thường được
gọi là khóa phụ (secondary key) Trong trường hợp này mỗi đầu
vào chỉ mục đại diện cho mỗi bản ghi trong file dữ liệu, nó chứa giá trị khóa phụ đại diện cho bản ghi và một con trỏ trỏ đến khối
mà bản ghi được lưu trữ hoặc trỏ đến chính bản ghi đó Do đó, chỉ
mục như vậy là dày đặc.
30. Chúng ta đặc hai giá trị trường của đầu vào chỉ mục i
là <K(i), P(i)> Những đầu vào được sắp xếp theo giá trị của K(i), vì vậy có thể thực hiện một tìm kiếm nhị phân Bởi vì những bản ghi của file dữ liệu không được sắp xếp theo thứ tự vật lý bởi những giá trị của trường khóa phụ, nên không thể sử dụng block anchors
Đó là lý do tại sao mà đầu vào chỉ mục được tạo ra cho mỗi bản ghi trong file dữ liệu hơn là cho mỗi khối như trong chỉ mục sơ cấp Hình 4 là một minh họa chỉ mục thứ cấp, trong đó các con trỏ P(i) trong các đầu vào chỉ mục là các con trỏ khối, không phải các con trỏ bản ghi Mỗi khi khối thích hợp được chuyển đến bộ nhớ chính, thì việc tìm kiếm cho bản ghi mong muốn bên trong khối có thể được tiến hành.
Bàn về thời gian truy xuất khối dữ liệu.
Trang 1431. Chỉ mục thứ cấp thường cần đến nhiều không gian lưu trữ và thời gian tìm kiếm hơn so với chỉ mục sơ cấp do số lượng các đầu vào nhiều hơn Tuy nhiên, việc cải tiến thời gian tìm kiếm cho một bản ghi bất kỳ đối với chỉ mục thứ cấp là lớn hơn nhiều so với chỉ mục sơ cấp, vì chúng ta sẽ phải thực hiện một phép tìm kiếm tuyến tính trên file dữ liệu nếu chỉ mục thứ cấp không tồn tại Với một chỉ mục sơ cấp, chúng ta vẫn có thể sử dụng một tìm kiếm nhị phân trên file chính, ngay cả khi chỉ mục không tồn tại Ví dụ 2 sau đây sẽ minh họa việc cải tiến số lượng các khối được truy xuất 32.
Trang 1533.
Trang 1634. Hình 4 Chỉ mục thứ cấp dày đặc (với các con trỏ khối) trên
một trường khóa không có thứ tự của một file
35. Ví dụ 2 Xét file ở ví dụ 1 với r = 30,000 các bản ghi có chiều
dài cố định với kích cỡ là R = 100 bytes được lưu trong một đĩa với kích thước khối là B = 1024 bytes File có b = 3000 khối, như đã tính trong ví dụ 1 Để thực hiện một tìm kiếm tuyến tính trên file, chúng ta cần trung bình là b/2 = 3000/2 = 1500 truy xuất khối Giả
sử rằng chúng ta xây dựng một chỉ mục thứ cấp trên một trường khóa không có thứ tự của file với V có chiều dài là 9 bytes Như trong ví dụ 1, một con trỏ khối là P có chiều dài là 6 bytes, vì vậy mỗi đầu vào chỉ mục là R i = (9 + 6) = 15 bytes, và hệ số tạo khối cho chỉ mục là bfr i = (B/R i ) = (1024/15) = 68 đầu vào cho mỗi khối Trong một chỉ mục thứ cấp dày đặc thì tổng số các đầu vào chỉ mục r i bằng với số các bản ghi trong file dữ liệu, tức là 30,000 Vì vậy số các khối cần cho chỉ mục b i = (r i /bfr i ) = (30000/68) =
442 khối
36. Một tìm kiếm nhị phân trên chỉ mục thứ cấp này cần
có (log 2 b i ) = (log 2 442) = 9 truy xuất khối Để tìm ra một bản ghi
sử dụng chỉ mục, chúng ta cần một truy xuất khối bổ sung vào file
dữ liệu cho một tổng của 9 + 1 = 10 khối truy xuất – một cải tiến đáng kể trên 1500 khối truy xuất cần thiết cho tìm kiếm tuyến tính, nhưng dường như tệ hơn so với 7 truy xuất khối được yêu cầu cho chỉ mục sơ cấp.
b. Chỉ mục thứ cấp trên trường không khóa
37. Chúng ta cũng có thể tạo ra một chỉ mục thứ cấp trên một trường không khóa của một file Trong trường hợp này, vô số bản ghi trong file dữ liệu có thể có cùng giá trị cho trường chỉ mục
Có một số lựa chọn cho việc cài đặt một chỉ mục như vậy:
Trang 17dành riêng một danh sách các con trỏ <P(i, 1), …, P(i, k)> trong đầu vào chỉ mục cho K(i)(một con trỏ đối đại diện mỗi khối chứa bản ghi có giá trị trường chỉ mục bằng K(i)) Trong lựa chọn 1 hoặc lựa chọn 2, giải thuật tìm kiếm nhị phân trên chỉ mục phải được hiệu chỉnh một cách thích hợp.
• Lựa chọn 3:
40. Được sử dụng phổ biến, để giữ các đầu vào chỉ mục ở một độ dài cố định và có đầu vào duy nhất cho mỗi giá trị trường chỉ mục nhưng để tạo ra một cấp bổ sung thao tác gián tiếp cho việc xử lý nhiều con trỏ Trong trường hợp không dày đặc, con trỏ P(i) trong đầu vào chỉ mục <K(i), P(i)> trỏ đến một khối các con trỏ bản ghi; mỗi con trỏ bản ghi trong khối đó trỏ đến một trong các bản ghi của file dữ liệu với giá trị K(i) của trường chỉ mục Nếu một giá trị K(i) nào đó xuất hiện trong quá nhiều bản ghi, thì các con trỏ bản ghi của chúng không thể đặt vào trong một khối đĩa duy nhất, một cụm hoặc một danh sách liên kết của các khối được
sử dụng Kỹ thuật này được minh họa trong Hình 5 Việc truy xuất thông qua chỉ mục yêu cầu thêm một hoặc nhiều truy xuất, nhưng giải thuật tìm kiếm chỉ mục và việc chèn một bản ghi mới trong file
dữ liệu lại được thực hiện dễ dàng hơn Ngoài ra, những phép truy xuất trên các điều kiện lọc phức tạp sẽ được xử lý bằng cách chuyển đến các con trỏ bản ghi mà không phải truy xuất quá nhiều bản ghi không cần thiết.
41. Chú ý rằng một chỉ mục thứ cấp cung cấp một thứ tự
logic trên những bản ghi bởi trường lập chỉ mục Nếu chúng ta
truy xuất các bản ghi theo thứ tự của những đầu vào trong chỉ mục thứ cấp thì chúng ta sẽ lấy chúng theo thứ tự của trường lập chỉ mục.