Tiểu luận học phần: Cơ sở dữ liệu nâng cao. Đề tài: CẤU TRÚC CHỈ MỤC FILE. Tiểu luận học phần: Cơ sở dữ liệu nâng cao. Đề tài: CẤU TRÚC CHỈ MỤC FILE Tiểu luận học phần: Cơ sở dữ liệu nâng cao. Đề tài: CẤU TRÚC CHỈ MỤC FILE
CÁC LOẠI CHỈ MỤC ĐƯỢC SẮP XẾP ĐƠN MỨC
Chỉ mục sơ cấp
Một chỉ mục sơ cấp là một file đã được sắp xếp với các bản ghi có độ dài cố định gồm hai trường: khóa chính (primary key) và một con trỏ đến khối đĩa Mỗi đầu vào chỉ mục trong file chỉ mục tương ứng với một khối trong file dữ liệu, chứa giá trị của trường khóa chính và con trỏ đến khối đó Để tạo chỉ mục sơ cấp, trường Name được sử dụng làm khóa chính, với giả định mỗi giá trị là duy nhất.
Chỉ mục sơ cấp được minh họa trong Hình 1, với tổng số đầu vào tương ứng với số khối đĩa trong file dữ liệu đã được 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) hay còn được biết đến là block anchor.
2 Chúng ta cũng có thể sử dụng một kịch bản tương tự như thế này, nhưng trong đó bản ghi cuối cùng của mỗi
Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”
Hình 1 Chỉ mục sơ cấp trên trường khóa có thứ tự của file của các bản ghi
EMPLOYEE với Name là một trường khóa có thứ tự.
Chỉ mục có thể được phân loại thành trù mật và thưa thớt Chỉ mục trù mật cung cấp một đầu vào cho mỗi giá trị khóa tìm kiếm, tương ứng với mọi bản ghi trong file dữ liệu Ngược lại, chỉ mục thưa chỉ có đầu vào cho một số giá trị tìm kiếm nhất định Chỉ mục sơ cấp được coi là không trù mật vì nó chỉ bao gồm một đầu vào cho mỗi khối đĩa trong file dữ liệu cùng với các khóa của bản ghi gốc, thay vì cho mỗi giá trị tìm kiếm.
File chỉ mục cho một chỉ mục sơ cấp yêu cầu ít khối hơn so với file dữ liệu do hai lý do chính: số đầu vào chỉ mục ít hơn và kích thước mỗi đầu vào chỉ mục nhỏ hơn Điều này cho phép lưu trữ nhiều đầu vào chỉ mục hơn trong một khối so với số bản ghi dữ liệu Do đó, việc thực hiện tìm kiếm nhị phân trên file chỉ mục cần ít truy xuất khối hơn so với file dữ liệu Cụ thể, tìm kiếm nhị phân trên file dữ liệu đã sắp xếp yêu cầu log2b lần truy xuất, trong khi nếu file chỉ mục sơ cấp chứa bi khối, tổng số lần truy xuất để định vị một bản ghi với giá trị tìm kiếm sẽ là log2bi + 1.
Một bản ghi có giá trị khóa chính K nằm trong khối có địa chỉ P(i), với điều kiện K(i) ≤ K < K(i+1) Khối thứ i trong file dữ liệu chứa tất cả các bản ghi theo thứ tự vật lý dựa trên trường khóa chính Để truy xuất một bản ghi với giá trị K đã biết, chúng ta thực hiện tìm kiếm nhị phân trên file chỉ mục để xác định chỉ mục thích hợp i, sau đó lấy khối file dữ liệu tại địa chỉ P(i).
Ví dụ 1 minh họa cách tiết kiệm số lần truy xuất khối khi sử dụng chỉ mục sơ cấp để tìm kiếm bản ghi Việc áp dụng chỉ mục sơ cấp giúp tối ưu hóa quy trình tìm kiếm, giảm thiểu thời gian truy xuất và nâng cao hiệu suất hệ thống.
Giả sử có một file với 30,000 bản ghi được lưu trữ trên đĩa và kích thước khối là 1024 bytes Mỗi bản ghi có kích thước cố định 100 bytes, dẫn đến hệ số tạo khối (blocking factor) là 10 bản ghi mỗi khối Tổng số khối cần cho file là 3000 khối Để thực hiện một phép tìm kiếm nhị phân trên file, cần khoảng 12 lần truy xuất khối.
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à
Bài viết đề cập đến việc xây dựng chỉ mục sơ cấp cho file với kích thước đầu vào chỉ mục là R i = 15 bytes, bao gồm 9 bytes cho dữ liệu và 6 bytes cho con trỏ khối P Hệ số tạo khối cho chỉ mục được tính là bfr i = 68 đầu vào cho mỗi khối, dựa trên kích thước khối 1024 bytes Tổng số đầu vào chỉ mục r i tương ứng với số khối trong file dữ liệu, tức là 3000 khối, từ đó số lượng khối chỉ mục được xác định là b i = (r i / bfr i ).
Để thực hiện tìm kiếm nhị phân trên file chỉ mục với 3000 bản ghi và kích thước khối 68, cần 6 lần truy xuất khối (log2 45 = 6) Khi tìm kiếm một bản ghi qua chỉ mục, cần thêm 1 lần truy xuất khối đến file dữ liệu, tổng cộng là 7 lần truy xuất Điều này cho thấy sự cải tiến so với việc tìm kiếm nhị phân trực tiếp trên file dữ liệu, yêu cầu 12 lần truy xuất khối.
3 Lưu ý rằng các công thức trên có thể sẽ không đúng nếu file dữ liệu được sắp xếp theo một trường không phải
Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”
Một vấn đề chính với chỉ mục sơ cấp là thao tác chèn và xóa bản ghi, vì việc chèn một bản ghi vào đúng vị trí trong file dữ liệu không chỉ yêu cầu di chuyển các bản ghi khác để tạo không gian mà còn phải cập nhật các đầu vào chỉ mục Sử dụng file overflow chưa sắp xếp có thể giảm bớt vấn đề này, hoặc có thể áp dụng danh sách liên kết cho các bản ghi overflow trong mỗi khối Phương pháp này tương tự như kỹ thuật băm, cho phép sắp xếp các bản ghi trong khối và danh sách liên kết overflow để cải thiện thời gian truy xuất Việc xóa bản ghi được thực hiện thông qua các dấu hiệu xóa.
Chỉ mục cụm
Khi các bản ghi file được sắp xếp theo thứ tự vật lý trên một trường không khóa mà không có giá trị phân biệt, trường đó được gọi là trường phân cụm Để tăng tốc độ truy xuất các bản ghi có cùng giá trị của trường phân cụm, chúng ta có thể tạo chỉ mục cụm Chỉ mục cụm khác với chỉ mục sơ cấp, vì chỉ mục sơ cấp yêu cầu trường có thứ tự của file dữ liệu phải có giá trị phân biệt cho mỗi bản ghi.
Chỉ mục cụm là một file được sắp xếp thứ tự, bao gồm hai trường: trường thứ nhất tương ứng với trường phân cụm của file dữ liệu và trường thứ hai là một con trỏ khối Mỗi giá trị phân biệt của trường phân cụm có một đầu vào trong chỉ mục, chứa giá trị và con trỏ đến khối đầu tiên trong file dữ liệu có bản ghi tương ứng Việc chèn và xóa bản ghi có thể gây ra vấn đề do thứ tự vật lý của các bản ghi, vì vậy thường dự trữ trước một khối hoặc nhóm khối cho mỗi giá trị của trường phân cụm để dễ dàng thực hiện các thao tác này.
Hình 2 Một chỉ mục cụm trên trường không khóa có thứ tự Dept_number của file EMPLOYEE
Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”
Hình 3 Chỉ mục cụm với một cụm các khối riêng biệt cho mỗi nhóm của các bản ghi chia sẻ cùng một giá trị cho trường phân cụm
Chỉ mục cụm là một ví dụ của chỉ mục không trù mật, với một đầu vào cho mỗi giá trị riêng biệt của trường chỉ mục, dẫn đến các giá trị trùng nhau thay vì phân biệt cho mỗi bản ghi Có sự tương đồng giữa chỉ mục và cấu trúc thư mục trong kỹ thuật băm có thể mở rộng, cả hai đều tìm kiếm để xác định con trỏ đến khối dữ liệu chứa bản ghi mong muốn Tuy nhiên, điểm khác biệt chính là tìm kiếm chỉ mục sử dụng các giá trị của trường tìm kiếm, trong khi tìm kiếm thư mục băm dựa vào giá trị băm được tính toán từ hàm băm.
Chỉ mục thứ cấp
Chỉ mục thứ cấp cung cấp một phương thức bổ sung để truy xuất file, bên cạnh các truy xuất sơ cấp Nó có thể được thực hiện trên trường khóa ứng viên (có giá trị duy nhất cho mỗi bản ghi) hoặc trên trường không khóa (có thể có giá trị trùng lặp) Chỉ mục là một file được sắp xếp với hai trường: trường đầu tiên là trường chỉ mục có cùng kiểu dữ liệu với các trường không sắp thứ tự của file dữ liệu, và trường thứ hai có thể là con trỏ khối hoặc con trỏ bản ghi Nhiều chỉ mục thứ cấp có thể tồn tại cho cùng một file Khi xét cấu trúc truy xuất chỉ mục thứ cấp trên trường khóa có giá trị phân biệt, mỗi bản ghi trong file dữ liệu sẽ có một đầu vào chỉ mục chứa giá trị của khóa phụ và con trỏ đến khối hoặc bản ghi, làm cho chỉ mục này trở nên trù mật.
Chúng ta một lần nữa xem xét hai giá trị trường của đầu vào chỉ mục i là Các đầu vào được sắp xếp theo giá trị của K(i), cho phép thực hiện tìm kiếm nhị phân Tuy nhiên, do các bản ghi trong file dữ liệu không được sắp xếp theo thứ tự vật lý của trường khóa phụ, việc sử dụng block anchors là không khả thi Vì vậy, mỗi đầu vào chỉ mục được tạo ra cho từng bản ghi trong file dữ liệu, thay vì cho mỗi khối như trong chỉ mục sơ cấp Hình 4 minh họa chỉ mục thứ cấp, trong đó các con trỏ P(i) là con trỏ khối, không phải con trỏ bản ghi Khi khối thích hợp được đưa vào bộ nhớ chính, việc tìm kiếm bản ghi mong muốn bên trong khối có thể được thực hiện.
Chỉ mục thứ cấp yêu cầu nhiều không gian lưu trữ và thời gian tìm kiếm hơn chỉ mục sơ cấp do số lượng đầu vào lớn hơn Tuy nhiên, thời gian tìm kiếm cho bản ghi trong chỉ mục thứ cấp lại hiệu quả hơn nhiều so với chỉ mục sơ cấp, vì nếu không có chỉ mục thứ cấp, ta sẽ phải thực hiện tìm kiếm tuyến tính trên file dữ liệu Ngược lại, với chỉ mục sơ cấp, ta vẫn có thể áp dụng tìm kiếm nhị phân trên file chính ngay cả khi không có chỉ mục.
2 sau đây sẽ minh họa việc cải tiến số lượng các khối được truy xuất.
Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”
Hình 4 Chỉ mục thứ cấp trù mật (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
Trong ví dụ 2, với file có 30,000 bản ghi độ dài cố định 100 bytes, được lưu trữ trên đĩa có kích thước khối 1024 bytes, ta có 3000 khối Để thực hiện tìm kiếm tuyến tính, cần trung bình 1500 lần truy xuất khối Nếu xây dựng chỉ mục thứ cấp trên trường khóa không có thứ tự với độ dài 9 bytes, mỗi đầu vào chỉ mục sẽ có kích thước 15 bytes (bao gồm con trỏ 6 bytes) Hệ số tạo khối cho chỉ mục là 68 đầu vào mỗi khối Tổng số đầu vào chỉ mục bằng số bản ghi trong file dữ liệu, tức 30,000, dẫn đến việc cần 442 khối cho chỉ mục.
Một phép tìm kiếm nhị phân trên chỉ mục thứ cấp yêu cầu (log2bi) (log2442) = 9 lần truy xuất khối Để truy xuất một bản ghi thông qua chỉ mục, cần thêm một lần truy xuất khối vào file dữ liệu, dẫn đến tổng cộng 10 lần truy xuất khối.
Cải tiến 9 + 1 = 10 lần truy xuất khối mang lại sự tiết kiệm đáng kể so với 1500 lần truy xuất khối cần cho tìm kiếm tuyến tính, tuy nhiên vẫn chưa đạt hiệu suất tối ưu so với 7 lần truy xuất khối của chỉ mục sơ cấp.
Chúng ta có khả năng tạo chỉ mục thứ cấp trên trường không khóa của một file, cho phép nhiều bản ghi trong file dữ liệu chia sẻ cùng một giá trị cho trường chỉ mục Có một số tùy chọn để thiết lập chỉ mục này.
Tùy chọn 1 cho phép gộp một số đầu vào chỉ mục có cùng giá trị K(i), tạo ra một chỉ mục trù mật cho mỗi bản ghi.
Tùy chọn 2 cho phép sử dụng các bản ghi có độ dài không cố định cho các đầu vào chỉ mục, kết hợp với một trường lặp cho con trỏ Chúng ta duy trì một danh sách các con trỏ trong đầu vào chỉ mục để quản lý dữ liệu hiệu quả.
K(i) là một con trỏ dẫn đến từng khối chứa bản ghi có giá trị trường chỉ mục tương ứng với K(i) Đối với tùy chọn 1 hoặc 2, thuật toán tìm kiếm nhị phân trên chỉ mục cần được điều chỉnh cho phù hợp.
Tùy chọn 3 là lựa chọn phổ biến hơn, cho phép giữ các đầu vào chỉ mục ở độ dài cố định và sử dụng một đầu vào đơn cho mỗi giá trị trường chỉ mục Tuy nhiên, phương pháp này tạo ra một mức bổ sung gián tiếp để xử lý nhiều con trỏ Trong kịch bản không trù mật, con trỏ P(i) trong đầu vào chỉ mục được sử dụng để quản lý thông tin hiệu quả hơn.
K(i), P(i) đại diện cho một khối các con trỏ bản ghi, với mỗi con trỏ trỏ đến một bản ghi trong file dữ liệu dựa trên giá trị K(i) của trường chỉ mục Khi một số giá trị K(i) xuất hiện quá nhiều trong các bản ghi, các con trỏ này không thể chỉ vào một khối đĩa duy nhất, dẫn đến việc sử dụng cụm hoặc danh sách liên kết các khối 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 nhiều lần truy xuất khối, nhưng các thuật toán tìm kiếm chỉ mục và việc chèn bản ghi mới vào file dữ liệu lại trở nên dễ dàng hơn Hơn nữa, các tìm kiếm với điều kiện chọn lọc phức tạp sẽ được xử lý qua các con trỏ bản ghi, giúp giảm thiểu việc truy xuất các bản ghi không cần thiết.
Chỉ mục thứ cấp cung cấp một cấu trúc sắp xếp hợp lý cho các bản ghi dựa trên trường chỉ mục Khi truy xuất các bản ghi theo thứ tự từ chỉ mục thứ cấp, chúng ta sẽ nhận được chúng theo thứ tự của trường chỉ mục đã xác định.
Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”
Chỉ mục thứ cấp được thiết lập trên một trường không khóa, sử dụng mức gián tiếp để đảm bảo các đầu vào chỉ mục có độ dài cố định và giá trị trường duy nhất.
Tóm tắt
Để kết luận, chúng ta tóm tắt các thảo luận về các loại chỉ mục qua hai bảng Bảng 1 nêu rõ các đặc điểm của trường chỉ mục cho từng loại chỉ mục đơn mức, bao gồm chỉ mục sơ cấp, chỉ mục cụm và chỉ mục thứ cấp Bảng 2 so sánh các thuộc tính của từng loại chỉ mục, phân tích số lượng đầu vào chỉ mục và xác định chỉ mục nào là trù mật cũng như chỉ mục nào sử dụng block anchors trong file dữ liệu.
Bảng 1 Các loại chỉ mục dựa trên các thuộc tính của trường chỉ mục
Trường chỉ mục được sử dụng cho việc sắp xếp file
Trường chỉ mục không được sử dụng cho việc sắp xếp file
Trường chỉ mục là khóa Chỉ mục sơ cấp Chỉ mục thứ cấp (khóa)
Trường chỉ mục không là khóa
Chỉ mục cụm Chỉ mục thứ cấp (không khóa)
Bảng 2 Thuộc tính của các loại chỉ mục
Số đầu vào chỉ mục (mức 1) Trù mật /
Sử dụng Block Anchor trên file dữ liệu
Sơ cấp Số các khối trong file dữ liệu Không trù mật
Cụm Số các giá trị trường chỉ mục phân biệt
Số các bản ghi trong file dữ liệu
Số các bản ghi b hoặc số các giá trị trường chỉ mục phân biệt c
Trù mật hoặc không trù mật
Không aCó nếu mỗi giá trị phân biệt của trường sắp thứ tự bắt đầu một khối mới; không nếu ngược lại. bCho tùy chọn 1. cCho tùy chọn 2 và 3.
CHỈ MỤC ĐA MỨC
Các loại chỉ mục đã đề cập đến một file chỉ mục được sắp xếp, cho phép áp dụng phép tìm kiếm nhị phân để xác định vị trí của các con trỏ tới khối đĩa hoặc bản ghi có giá trị trường chỉ mục cụ thể Phép tìm kiếm nhị phân yêu cầu số lần truy xuất khối xấp xỉ là (log2 b i), với b i là số khối, vì mỗi bước của thuật toán này giảm kích thước phần cần tìm kiếm trong file chỉ mục theo hệ số 2 Điều này giải thích tại sao sử dụng hàm log cơ số 2 là cần thiết Ý tưởng của chỉ mục đa mức là giảm phần của chỉ mục cần tìm kiếm theo hệ số bfr i, tức là hệ số tạo khối cho chỉ mục.
Cấu trúc chỉ mục cho file trong môn CSDL nâng cao cho thấy rằng khi chỉ mục lớn hơn 2, không gian tìm kiếm sẽ giảm nhanh chóng Hệ số phân đầu ra (fan-out) của chỉ mục đa mức được ký hiệu là fo, và việc tìm kiếm một chỉ mục đa mức yêu cầu số lần truy xuất khối xấp xỉ (log fo b i) Giá trị này nhỏ hơn so với tìm kiếm nhị phân khi fan-out lớn hơn 2.
Chỉ mục đa mức có cấu trúc với mức 1, hay còn gọi là mức cơ sở, được tổ chức thành một file với giá trị phân biệt cho mỗi K(i) Chúng ta có thể xây dựng chỉ mục sơ cấp cho mức 1, được gọi là mức 2 trong chỉ mục đa mức Do mức 2 là chỉ mục sơ cấp, nó cho phép sử dụng các block anchors để tạo đầu vào cho mỗi khối của mức 1 Hệ số tạo khối bfr i cho mức 2 và các mức tiếp theo giống như hệ số tạo khối của chỉ mục mức 1, vì tất cả đầu vào chỉ mục đều có kích thước đồng nhất (bao gồm 1 giá trị trường và 1 địa chỉ khối) Nếu mức 1 có r 1 đầu vào, với hệ số tạo khối, hay fan-out, cho chỉ mục là bfr i = fo, thì mức
1 cần (r 1 /fo) khối, đó chính là số lượng các đầu vào mà r 2 cần ở mức 2 của chỉ mục.
Chúng ta có thể tiếp tục lặp lại quy trình này cho các mức chỉ mục cao hơn Mức 3, là chỉ mục sơ cấp cho mức 2, có một đầu vào cho mỗi khối ở mức 2, do đó số lượng đầu vào ở mức 3 được tính bằng r3 = (r2 / fo) Chúng ta chỉ cần đến mức 2 khi việc lưu trữ ở mức 1 yêu cầu nhiều hơn một khối, và mức 3 chỉ cần thiết khi mức 2 cần nhiều hơn một khối Quy trình này có thể lặp lại cho đến khi tất cả các đầu vào của một chỉ mục t nào đó nằm trong một khối duy nhất, được gọi là mức chỉ mục cao nhất t Mỗi mức sẽ giảm số lượng đầu vào ở mức trước đó theo hệ số fo, cho phép chúng ta sử dụng công thức 1 ≤ (r1 / (fo)^t) để tính toán t Như vậy, một chỉ mục đa mức với r1 đầu vào ở mức 1 sẽ có khoảng t mức, với t = (log fo (r1)).
Kịch bản đa mức có thể áp dụng cho mọi loại chỉ mục, bao gồm chỉ mục sơ cấp, chỉ mục cụm và chỉ mục thứ cấp, miễn là chỉ mục cấp 1 có các giá trị phân biệt K(i) và đầu vào có độ dài cố định Hình 6 minh họa một chỉ mục đa mức, trong khi Ví dụ 3 sẽ cho thấy sự cải thiện đáng kể về số lần truy xuất khối khi sử dụng chỉ mục đa mức để tìm kiếm bản ghi.
Trong ví dụ 3, chỉ mục thứ cấp trù mật được chuyển đổi thành chỉ mục đa mức Hệ số tạo khối chỉ mục được tính là bfr i = 68 đầu vào chỉ mục cho mỗi khối, tương ứng với fan-out fo cho chỉ mục đa mức Số khối ở mức 1 là b 1 = 442 khối, trong khi số khối ở mức 2 được tính là b 2 = (b 1 /fo) = (442/68) = 7 khối Cuối cùng, số khối ở mức 3 là b 3 = (b 2 /fo) = (7/68) = 1 khối.
Việc đánh số các mức chỉ mục trong bài viết này được thực hiện theo cách ngược lại so với định nghĩa thông thường trong các cấu trúc dữ liệu cây, nơi mức 0 được ký hiệu là t, mức 1 là t-1, và tiếp tục như vậy.
Mức 3 là mức cao nhất của chỉ mục, với t = 3 Để truy xuất một bản ghi qua chỉ mục đa mức, cần truy xuất một khối ở mỗi mức và một khối từ file dữ liệu, tổng cộng là t + 1 = 3 + 1.
Trong ví dụ đầu tiên, chỉ cần 4 lần truy xuất khối để hoàn thành tác vụ, trong khi ví dụ thứ hai yêu cầu tới 10 lần truy xuất khối khi áp dụng chỉ mục đơn mức kết hợp với phép tìm kiếm nhị phân.
Hình 6 Một chỉ mục sơ cấp 2 mức tương tự như tổ chức file kiểu ISAM
(Phương pháp truy xuất tuần tự theo chỉ mục)
Chúng ta có thể có một chỉ mục sơ cấp đa mức không trù mật, điều này yêu cầu phải truy xuất khối dữ liệu từ file để xác định sự tồn tại của bản ghi Ngược lại, với chỉ mục trù mật, việc xác định bản ghi có trong file hay không có thể thực hiện dễ dàng hơn bằng cách truy xuất mức chỉ mục đầu tiên mà không cần phải truy cập vào khối dữ liệu.
Mô hình tổ chức file phổ biến trong xử lý dữ liệu kinh doanh là file tuần tự có chỉ mục, được sắp xếp theo thứ tự với chỉ mục sơ cấp đa mức trên trường khóa Mô hình này đã được áp dụng rộng rãi trong nhiều hệ thống máy tính trước đây.
Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”
IBM sử dụng mô hình tổ chức ISAM kết hợp với chỉ mục hai mức để quản lý dữ liệu hiệu quả Quá trình này bao gồm việc chèn bản ghi vào các file overflow và định kỳ hợp nhất chúng với file dữ liệu chính Chỉ mục được tái tạo trong quá trình tổ chức lại file, với mức đầu tiên là chỉ số trụ (cylinder index) chứa giá trị khóa của bản ghi anchor cho mỗi cylinder và con trỏ đến chỉ số rãnh (track index) tương ứng Chỉ số rãnh lưu trữ giá trị khóa của bản ghi anchor cho mỗi track trong cylinder, cho phép tìm kiếm tuần tự để truy xuất bản ghi hoặc khối dữ liệu mong muốn.
Thuật toán 1 mô tả quy trình tìm kiếm một bản ghi trong file dữ liệu bằng chỉ mục sơ cấp đa mức không trù mật với t mức Đầu vào i ở mức j của chỉ mục được biểu diễn là , và mục tiêu là tìm bản ghi có giá trị khóa chính K Giả định rằng các bản ghi overflow đã được loại bỏ, nếu bản ghi nằm trong file, sẽ tồn tại một đầu vào ở mức 1 thỏa mãn K 1 (i) ≤ K < K 1 (i+1), và bản ghi sẽ nằm trong khối dữ liệu có địa chỉ P 1 (i).
Thuật toán 1 Tìm kiếm một chỉ mục sơ cấp đa mức không trù mật với t mức.
Chỉ mục đa mức giúp giảm số lần truy xuất khối khi tìm kiếm bản ghi, nhưng cũng gặp phải các vấn đề trong việc chèn và xóa chỉ mục do các mức chỉ mục được sắp xếp theo thứ tự vật lý Để duy trì lợi ích của chỉ mục đa mức và giảm thiểu khó khăn trong việc chèn và xóa, các nhà thiết kế đã phát triển chỉ mục đa mức động (dynamic multilevel index) Chỉ mục này dành một không gian nhất định trong mỗi khối để chèn các đầu vào mới, thường sử dụng cấu trúc dữ liệu B-trees và B+-trees.
Tìm đầu vào i trong khối p sao cho K j (i) ≤ K < K j (i + 1) Nếu K j (i) là đầu vào cuối cùng trong khối, chỉ cần thỏa mãn K j (i) ≤ K Gán p ← P j (i) để lấy con trỏ thích hợp ở mức chỉ mục thứ j Sau đó, đọc khối file dữ liệu có địa chỉ p.
Tìm trong khối p bản ghi với khóa = K;
CÁC CHỈ MỤC ĐA MỨC ĐỘNG SỬ DỤNG B-TREES VÀ B + -TREES
Cây tìm kiếm và B-tree
Cây tìm kiếm là một cấu trúc đặc biệt giúp định hướng việc tìm kiếm bản ghi và trả về giá trị của các trường trong bản ghi Chỉ mục đa mức, được trình bày trong phần 2, là một biến thể của cây tìm kiếm, với mỗi nút chứa con trỏ và giá trị khóa Các giá trị trường trong mỗi nút dẫn dắt chúng ta đến nút tiếp theo cho đến khi tìm thấy khối dữ liệu chứa bản ghi mong muốn Bằng cách sử dụng con trỏ, chúng ta giới hạn việc tìm kiếm trong một cây con của cây tìm kiếm, loại bỏ các nút không thuộc cây con đó.
Cây tìm kiếm bậc p là một cấu trúc dữ liệu trong đó mỗi nút chứa tối đa p-1 giá trị tìm kiếm và p con trỏ, được sắp xếp theo thứ tự cụ thể Mỗi nút có thể trỏ đến các nút con hoặc NULL, với các giá trị tìm kiếm được giả định là duy nhất Để đảm bảo tính chính xác, cây tìm kiếm phải tuân thủ hai ràng buộc quan trọng.
2 Đối với tất cả các giá trị X trong cây con được trỏ bởi P i , chúng ta có
K i-1 X K i với 1 i q; X K i với i = 1; K i-1 X với i = q (xem hình 8)
Hình 8 Một nút trong cây tìm kiếm với các con trỏ trỏ đến các cây con bên dưới
Khi tìm kiếm một giá trị X, chúng ta sử dụng con trỏ P i phù hợp dựa trên công thức đã nêu trong điều kiện 2 Hình 9 minh họa một cây tìm kiếm bậc p = 3 cùng với các giá trị tìm kiếm kiểu nguyên, trong đó có một số con trỏ quan trọng.
P i trong một nút có thể là các con trỏ NULL.
Có thể nới lỏng 6 ràng buộc này Khi lập chỉ mục trên một trường không khóa, có thể xuất hiện các giá trị tìm kiếm trùng lặp Đồng thời, cấu trúc nút và các quy tắc duyệt của cây cũng có thể được điều chỉnh.
Hình 9 Cây tìm kiếm với bậc p = 3
Cây tìm kiếm là một công cụ hữu ích để truy xuất các bản ghi lưu trữ trên đĩa Các giá trị trong cây đại diện cho các trường tìm kiếm trong file, với mỗi khóa được liên kết đến một con trỏ trỏ tới bản ghi tương ứng Con trỏ này có thể dẫn đến bản ghi hoặc khối đĩa chứa bản ghi đó Cây tìm kiếm có thể được lưu trữ trên đĩa, với mỗi nút tương ứng với một khối đĩa Khi thêm bản ghi mới, cần cập nhật cây bằng cách chèn một mục mới chứa giá trị trường tìm kiếm và con trỏ đến bản ghi mới.
Các thuật toán là rất cần thiết cho quá trình chèn và xóa giá trị trong cây tìm kiếm, đồng thời duy trì các ràng buộc cần thiết Tuy nhiên, những thuật toán này không đảm bảo cây tìm kiếm luôn cân bằng, dẫn đến việc các nút lá có thể nằm ở các mức khác nhau Việc giữ cho cây tìm kiếm cân bằng là quan trọng để tránh tình trạng nút ở mức quá cao, từ đó giảm thiểu số lần truy xuất khối trong quá trình tìm kiếm Cây tìm kiếm cân bằng giúp tăng tốc độ tìm kiếm mà không phụ thuộc vào giá trị khóa Một vấn đề khác là việc xóa bản ghi có thể tạo ra các nút gần như trống, gây lãng phí không gian lưu trữ và tăng số lượng mức Cây B-tree được thiết kế để giải quyết các vấn đề này bằng cách đưa ra các ràng buộc bổ sung cho cây tìm kiếm.
Cây B-tree có các ràng buộc để duy trì sự cân bằng và hạn chế lãng phí không gian từ các thao tác xóa Mặc dù các thuật toán chèn và xóa trở nên phức tạp hơn để đáp ứng các ràng buộc này, phần lớn các thao tác vẫn đơn giản, chỉ phức tạp trong một số trường hợp đặc biệt như khi chèn vào nút đã đầy hoặc xóa từ nút có thể dẫn đến tình trạng không đủ Cụ thể, một B-tree có bậc p được sử dụng như một cấu trúc truy cập hiệu quả.
Cấu trúc chỉ mục cho file là một trường khóa quan trọng giúp tìm kiếm các bản ghi trong một file dữ liệu Việc sử dụng cấu trúc chỉ mục hiệu quả không chỉ nâng cao tốc độ truy xuất dữ liệu mà còn cải thiện hiệu suất tổng thể của hệ thống quản lý cơ sở dữ liệu.
1 Mỗi nút trong (internal) trong B-tree (hình 10(a)) có dạng
Trong cấu trúc B-tree, mỗi phần tử P_i là một con trỏ cây, dẫn đến một nút khác trong cây B, trong khi mỗi con trỏ dữ liệu Pr_i trỏ đến bản ghi có giá trị trường khóa tìm kiếm tương ứng K_i Điều này cho phép việc truy cập và tìm kiếm dữ liệu trở nên hiệu quả hơn, với điều kiện rằng số lượng phần tử q không vượt quá p.
3 Đối với tất cả các giá trị trường khóa tìm kiếm X trong cây con được trỏ bởi P i (cây con thứ i – xem hình 10(a)), chúng ta có:
4 Mỗi nút có tối đa p con trỏ cây.
5 Mỗi nút, ngoại trừ nút gốc và các nút lá, có ít nhất ⌈(p/2)⌉ ⌈ ( p/ 2)⌉ con trỏ cây Nút gốc sẽ có ít nhất hai con trỏ cây trừ phi nút đó là nút duy nhất trên cây.
6 Một nút có q con trỏ cây, q ≤ p, sẽ có q-1 giá trị trường khóa tìm kiếm (và do đó, có q-1 con trỏ dữ liệu).
7 Tất cả các nút lá đều cùng một mức Các nút lá có cùng cấu trúc như các nút trong, ngoại trừ việc tất cả các con trỏ cây P i của chúng đều là NULL.
Bài viết mô tả một B-tree với bậc p = 3, trong đó tất cả các giá trị tìm kiếm K là duy nhất, phù hợp với việc sử dụng cây như một cấu trúc truy cập trên trường khóa Nếu B-tree được áp dụng cho trường không phải khóa, cần điều chỉnh định nghĩa các con trỏ file Pr i để trỏ đến một khối hoặc cụm khối chứa các con trỏ đến các bản ghi của file Sự bổ sung gián tiếp này tương tự như tùy chọn 3 đã đề cập trong phần 1.3 về các chỉ mục thứ cấp.
Một con trỏ dữ liệu có thể đại diện cho một địa chỉ khối hoặc một địa chỉ bản ghi Địa chỉ bản ghi thực chất là một địa chỉ khối kết hợp với một offset xác định vị trí của bản ghi trong khối đó.
Cây B-tree bắt đầu với một nút gốc đơn ở mức 0 Khi nút gốc đầy đủ với p-1 giá trị khóa và cần chèn thêm mục, nó sẽ tách thành 2 nút ở mức 1, giữ lại giá trị giữa trong nút gốc Nếu một nút không phải gốc đầy và có mục mới được chèn, nó cũng sẽ tách thành 2 nút, với mục giữa chuyển lên nút cha Nếu nút cha đầy, nó sẽ tách và quá trình này có thể lan truyền đến nút gốc, tạo ra mức mới nếu cần Bài viết sẽ không đi sâu vào thuật toán của B-tree mà chỉ tổng quát các thủ tục tìm kiếm và chèn cho B+-tree.
Khi xóa một giá trị làm cho một nút không còn đầy đủ, nút này sẽ kết hợp với các nút láng giềng, có thể dẫn đến việc giảm số lượng mức của cây Phân tích cho thấy, sau nhiều phép chèn và xóa ngẫu nhiên trên B-tree, các nút sẽ đạt độ đầy đủ khoảng 69% khi số lượng giá trị trong cây ổn định, điều này cũng áp dụng cho B+-tree Khi đó, việc tách và kết hợp nút sẽ hiếm khi xảy ra, giúp các phép chèn và xóa trở nên hiệu quả hơn Nếu số lượng giá trị tăng, cây sẽ mở rộng mà không gặp vấn đề, mặc dù việc tách nút có thể làm một số phép chèn mất nhiều thời gian hơn Ví dụ 4 dưới đây minh họa cách tính bậc p của B-tree lưu trữ trên đĩa.
Ví dụ 4 Giả sử trường tìm kiếm V có độ dài 9 byte, kích thước khối đĩa là
B = 512 byte, một con trỏ bản ghi (dữ liệu) là Pr = 7 byte, và một con trỏ khối là
Cây B + -Tree
Hầu hết các chỉ mục đa mức động sử dụng cấu trúc dữ liệu B + -tree, một biến thể của B-tree Trong B-tree, mỗi giá trị trường tìm kiếm chỉ xuất hiện một lần với con trỏ dữ liệu, trong khi B + -tree chỉ lưu trữ con trỏ dữ liệu tại các nút lá Các nút lá chứa mục cho mỗi giá trị trường tìm kiếm và con trỏ dữ liệu trỏ đến bản ghi hoặc khối chứa bản ghi nếu trường tìm kiếm là khóa Đối với trường tìm kiếm không phải khóa, con trỏ sẽ trỏ đến khối chứa các con trỏ đến các bản ghi file dữ liệu, tạo ra một mức bổ sung gián tiếp.
Các nút lá của cây B+-tree được liên kết để cung cấp khả năng truy cập có thứ tự trên trường tìm kiếm đối với các bản ghi, tương tự như mức đầu tiên của một chỉ mục Nút trong của B+-tree tương ứng với các mức khác nhau của chỉ mục đa mức Một số giá trị trường tìm kiếm ở các nút lá được lặp lại trong các nút trong để hỗ trợ quá trình tìm kiếm Cấu trúc của các nút trong của cây B+-tree có bậc p được mô tả rõ ràng trong hình 11(a).
1 Mỗi nút trong có dạng
trong đó q ≤ p và mỗi P i là một con trỏ cây.
3 Đối với tất cả các giá trị trường tìm kiếm X trong cây con được trỏ bởi
P i , chúng ta có K i-1 X ≤ K i với 1 i q; X ≤ K i với i = 1; K i-1 X với i = q (xem hình 11 (a)) 9
4 Mỗi nút trong có tối đa p con trỏ cây.
5 Mỗi nút trong, ngoại trừ nút gốc, có ít nhất ⌈(p/2)⌉ ⌈ ( p/ 2)⌉ con trỏ cây Nút gốc sẽ có ít nhất hai con trỏ cây nếu nó là nút trong.
6 Một nút trong với q con trỏ, q ≤ p, sẽ có q-1 giá trị trường tìm kiếm Cấu trúc các nút lá của cây B + -tree bậc p (hình 11(b)) sẽ có dạng sau:
1 Mỗi nút lá có dạng
trong đó q ≤ p, mỗi Pr i là một con trỏ dữ liệu và P next trỏ đến nút lá tiếp theo của B + -tree.
Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”
3 Mỗi Pr i là một con trỏ dữ liệu trỏ đến bản ghi có giá trị trường tìm kiếm là K i hoặc trỏ đến một khối file có chứa bản ghi (hoặc trỏ đến một khối các con trỏ bản ghi trỏ đến các bản ghi có giá trị trường tìm kiếm là K i nếu trường tìm kiếm không phải là khóa).
4 Mỗi nút lá có ít nhất ⌈ ( p/ 2)⌉ ⌈(p/2)⌉ giá trị.
5 Tất cả các nút lá đều ở cùng một mức.
Hình 11 Các nút của một B + -tree
Các con trỏ trong cây bao gồm con trỏ cây ở các nút trong và con trỏ dữ liệu ở các nút lá, trong đó con trỏ P next giúp duyệt qua các nút lá như một danh sách liên kết từ nút lá cực trái Điều này cho phép truy cập có thứ tự đến các bản ghi dữ liệu trên trường chỉ mục Ngoài ra, có thể bổ sung con trỏ P previous trong cây Đối với cây B+-tree trên trường không phải là khóa, cần có mức bổ sung gián tiếp, trong đó các con trỏ Pr trỏ đến các khối chứa tập hợp con trỏ bản ghi thực sự trong file dữ liệu.
Trong B + -tree, các nút bên trong chỉ chứa giá trị tìm kiếm và con trỏ cây, không có con trỏ dữ liệu, cho phép tập hợp nhiều mục hơn trong một nút so với B-tree Do đó, với kích thước khối tương đương, bậc p của B + -tree sẽ lớn hơn bậc của B-tree, dẫn đến ít mức hơn và cải thiện thời gian tìm kiếm Cấu trúc khác nhau giữa nút trong và nút lá cũng cho phép bậc p và bậc p leaf khác nhau, trong đó p là bậc của nút trong và p leaf là số lượng tối đa con trỏ dữ liệu trong một nút lá.
Để tính bậc p của một B + -tree, giả sử khóa tìm kiếm V có độ dài 9 byte, kích thước khối đĩa là B = 512 byte, con trỏ bản ghi Pr = 7 byte và con trỏ khối P = 6 byte Một nút trong B + -tree có thể chứa tối đa p con trỏ cây và p-1 giá trị trường tìm kiếm, với điều kiện các giá trị này phải nằm gọn trong một khối đĩa đơn.
Chúng ta có thể chọn p là giá trị lớn nhất thỏa mãn bất đẳng thức, với p = 34, lớn hơn giá trị p = 23 của B-tree Kết quả là hệ số đầu ra sẽ cao hơn, dẫn đến số mục ở mỗi nút trong B+-tree nhiều hơn so với B-tree tương ứng Các nút lá của B+-tree sẽ có số lượng giá trị và con trỏ giống nhau, ngoại trừ con trỏ dữ liệu và một con trỏ next Do đó, bậc p leaf của các nút lá có thể được tính như sau:
Mỗi nút lá có khả năng chứa tối đa 31 bộ kết hợp , với giả định rằng các con trỏ dữ liệu là các con trỏ bản ghi.
Trong các cây B-tree, mỗi nút cần thông tin bổ sung để thực hiện các thuật toán chèn và xóa, bao gồm loại nút (nút trong hay nút lá), số lượng mục hiện tại q trong nút, và các con trỏ tới nút cha và các nút anh em Trước khi thực hiện các phép toán cho p và p leaf, cần giảm kích thước khối để đảm bảo đủ không gian cho thông tin này Ví dụ tiếp theo sẽ minh họa cách tính số lượng mục trong một B+-tree.
Trong ví dụ 7, chúng ta xây dựng một B + -tree dựa trên trường của ví dụ 6 Để ước lượng số lượng mục trong B + -tree, giả sử mỗi nút được lấp đầy 69% Trung bình, mỗi nút sẽ có khoảng 23 con trỏ, tương đương với 22 giá trị Các nút lá trung bình sẽ chứa khoảng 21 giá trị, cụ thể là 0.69 * 31.
21 con trỏ bản ghi dữ liệu Một cây B + -tree sẽ có số lượng trung bình các mục ở từng mức như sau:
Gốc: 1 nút 22 mục 23 con trỏ
Mức 1: 23 nút 506 mục 529 con trỏ
Mức 2: 529 nút 11,639 mục 12,167 con trỏ
Mức lá: 12,167 nút 255,507 con trỏ bản ghi dữ liệu
Trong tiểu luận về CSDL nâng cao, chúng ta phân tích cấu trúc chỉ mục cho file, với kích thước khối, kích thước con trỏ và kích thước trường khóa tìm kiếm đã được xác định Cụ thể, một cây B+-tree ba mức có thể chứa trung bình 255,507 con trỏ bản ghi, trong khi đó cây B-tree tương ứng chỉ có 65,535 mục.
Tìm kiếm, Chèn, và Xóa với B + -tree
Thuật toán 2 mô tả cách sử dụng B + -tree như một cấu trúc truy cập để tìm kiếm bản ghi, trong khi Thuật toán 3 minh họa quy trình chèn bản ghi vào file với cấu trúc B + -tree Các thuật toán này giả định rằng đã có một trường khóa tìm kiếm, và cần điều chỉnh cho trường hợp B + -tree trên trường không phải khóa Chúng tôi sẽ cung cấp ví dụ minh họa cho quá trình chèn và xóa trong B + -tree.
Thuật toán 2 mô tả quá trình tìm kiếm một bản ghi với giá trị trường khóa K trong cấu trúc B+-tree Đầu tiên, khối chứa nút gốc của B+-tree được đọc Trong khi nút hiện tại không phải là nút lá, thuật toán sẽ xác định số lượng con trỏ trong nút và so sánh giá trị K với các giá trị khóa trong nút Nếu K nhỏ hơn hoặc bằng giá trị khóa đầu tiên, thuật toán sẽ chuyển đến con trỏ tương ứng; nếu K lớn hơn giá trị khóa cuối cùng, nó sẽ chuyển đến con trỏ cuối cùng Nếu K nằm giữa hai giá trị khóa, thuật toán sẽ tìm con trỏ thích hợp để tiếp tục Khi đến nút lá, thuật toán sẽ tìm kiếm bản ghi với khóa K và nếu tìm thấy, sẽ đọc khối dữ liệu từ địa chỉ tương ứng; nếu không, thông báo rằng bản ghi không có trong file dữ liệu sẽ được trả về.
Để chèn một bản ghi với giá trị trường khóa tìm kiếm K vào B+-tree có bậc p, đầu tiên, xác định khối chứa nút gốc của B+-tree và đọc khối n Tiếp theo, thiết lập một stack S rỗng và thực hiện vòng lặp cho đến khi n trở thành nút lá của B+-tree, trong đó địa chỉ của n sẽ được đẩy vào stack S.
Trong quá trình chèn mục vào B+-tree, đầu tiên, ta lưu trữ các nút cha cần thiết để xử lý việc tách nút Đếm số lượng con trỏ cây trong nút n và kiểm tra giá trị K so với n.K Nếu K nhỏ hơn hoặc bằng n.K, ta di chuyển đến con trỏ cha n.P Nếu K lớn hơn n.K q-1, ta chuyển đến con trỏ n.P q Trong trường hợp còn lại, tìm mục i trong nút n sao cho n.K i-1 < K ≤ n.K i và di chuyển đến con trỏ n.P i Sau khi đọc khối n, ta tìm mục (K i, Pr i) với K = K i Nếu mục đã tồn tại, thông báo rằng "bản ghi đã tồn tại trong file; không thể chèn thêm" Nếu không, tạo mục mới (K, Pr) trỏ đến bản ghi mới Nếu nút lá n chưa đầy đủ, chèn mục vào vị trí thích hợp Ngược lại, nếu nút đã đầy, ta sẽ tách nút bằng cách sao chép n vào một nút tạm temp, rồi chèn mục (K, Pr) vào temp tại vị trí thích hợp.
CÁC CHỈ MỤC TRÊN NHIỀU KHÓA
Chỉ mục có thứ tự trên nhiều thuộc tính
Tất cả các phương pháp đã được trình bày có thể áp dụng nếu chúng ta tạo một chỉ mục trên trường khóa tìm kiếm, kết hợp các yếu tố cần thiết để tối ưu hóa hiệu quả tìm kiếm.
Khóa tìm kiếm trong ví dụ trên được biểu thị bằng cặp giá trị Nói chung, khi một chỉ mục được tạo ra trên tập hợp giá trị , các giá trị khóa tìm kiếm sẽ được xác định bởi các bộ n giá trị tương ứng: .
Một phép sắp thứ tự theo từ điển các bộ giá trị thiết lập thứ tự cho khóa tìm kiếm Ví dụ, các khóa phòng ban với số phòng ban là 3 sẽ đứng trước các khóa có số phòng ban là 4, dẫn đến việc sẽ đứng trước với mọi giá trị m và n Thứ tự khóa tăng dần cho Dno = 4 sẽ là , , , … Quá trình sắp xếp theo từ điển tương tự như sắp xếp chuỗi ký tự, và chỉ mục trên khóa hợp với n thuộc tính giống như các loại chỉ mục đã thảo luận trước đó.
Phương pháp băm phân hoạch (partitioned hashing)
Phương pháp băm được phân hoạch là một mở rộng của phương pháp băm bên ngoài tĩnh, cho phép truy cập trên nhiều khóa Phương pháp này chỉ thích hợp với các so sánh bằng và không hỗ trợ truy vấn khoảng Trong phương pháp này, mỗi khóa được tạo thành từ n thành phần, và hàm băm sẽ trả về n địa chỉ băm riêng biệt Địa chỉ vùng chứa là một dãy kết nối của các địa chỉ này, giúp tìm kiếm khóa bằng cách dò tìm các bucket tương ứng với các phần của địa chỉ cần thiết.
Khi xem xét khóa tìm kiếm hợp , nếu Dno và Age được băm vào các địa chỉ 3-bit và 5-bit, chúng ta sẽ có một địa chỉ bucket 8-bit Ví dụ, với Dno = 4 có địa chỉ băm là “100”, và Age = 59 sẽ có địa chỉ băm tương ứng.
Để tìm giá trị kết hợp cho Dno = 4 và Age = 59, phép tìm kiếm sẽ truy cập vào địa chỉ bucket 100 10101 Nếu muốn tìm kiếm tất cả nhân viên có Age Y, quá trình sẽ tìm kiếm tất cả 8 bucket với địa chỉ tương ứng.
"000 10101", "001 10101", Một ưu điểm của phương pháp băm phân hoạch này là nó có thể dễ dàng được mở rộng với một số bất kỳ các thuộc tính Các địa
Cấu trúc chỉ mục cho file chỉ bucket có thể được tối ưu hóa để các bit bậc cao trong địa chỉ tương ứng với các giá trị được truy cập thường xuyên hơn, giúp cải thiện hiệu suất truy xuất dữ liệu Tuy nhiên, phương pháp này có nhược điểm lớn là không thể xử lý các truy vấn khoảng trên bất kỳ thuộc tính thành phần nào, điều này hạn chế khả năng truy xuất thông tin linh hoạt.
Các file lưới (grid)
Một phương pháp hiệu quả để tổ chức file EMPLOYEE là sử dụng mảng lưới Khi cần truy cập file dựa trên hai khóa như Dno và Age, chúng ta có thể xây dựng một mảng lưới với một chiều tuyến tính cho mỗi thuộc tính Mảng lưới này, như trong Hình 14, được thiết kế để phân phối đều các nhân viên theo thuộc tính Dno và Age Cụ thể, Dno = 1 và 2 kết hợp thành giá trị 0, trong khi Dno = 5 tương ứng với giá trị 2 Tương tự, Age được chia thành các giá trị từ 0 đến 5 để phân phối đều nhân viên theo độ tuổi Mảng lưới này bao gồm 36 ô, mỗi ô trỏ đến một địa chỉ bucket chứa các bản ghi tương ứng Hình 14 cũng minh họa cách các ô được gán cho các bucket.
Hình 14 Ví dụ về một mảng lưới trên thuộc tính Dno và Age
Từ đó, yêu cầu của chúng ta về Dno = 4 và Age = 59 sẽ ánh xạ vào ô (1,
5) tương ứng với mảng lưới Các bản phù hợp với cặp khóa kết hợp này sẽ được tìm thấy trong bucket tương ứng Phương pháp này đặc biệt hữu dụng cho các truy vấn khoảng khi ánh xạ vào một tập các ô tương ứng với một nhóm các giá trị trên chiều tuyến tính Về mặt khái niệm, khái niệm file lưới có thể được áp dụng cho một số lượng bất kỳ các khóa tìm kiếm Với n khóa tìm kiếm, mảng lưới sẽ có n chiều Do đó, mảng lưới cho phép việc phân hoạch của file dọc theo các chiều của những thuộc tính khóa tìm kiếm và cung cấp khả năng truy cập bằng cách kết hợp các giá trị dọc theo những chiều đó Các file lưới có hiệu năng tốt trong việc giảm thời gian truy cập nhiều khóa Tuy nhiên, các file này lại sử dụng nhiều không gian cho cấu trúc mảng lưới Hơn nữa, với các file động, chi phí duy trì còn bao gồm một sự tái tổ chức lại file một cách thường xuyên.
CÁC LOẠI CHỈ MỤC KHÁC
Sử dụng phương pháp băm và các cấu trúc dữ liệu khác làm chỉ mục
Chúng ta có thể xây dựng các cấu trúc truy cập tương tự như chỉ mục thông qua phép băm, trong đó các đầu vào chỉ mục (hoặc ) được tổ chức như một file băm có thể mở rộng linh hoạt Việc tìm kiếm các mục sẽ áp dụng thuật toán tìm kiếm băm dựa trên K, và khi một mục được xác định, con trỏ Pr (hoặc P) sẽ giúp định vị bản ghi tương ứng trong file dữ liệu Ngoài ra, các cấu trúc tìm kiếm khác cũng có thể được sử dụng như các chỉ mục.
Chỉ mục logic và chỉ mục vật lý
Chỉ mục vật lý (hay ) bao gồm con trỏ vật lý xác định địa chỉ bản ghi trên đĩa, nhưng gặp khó khăn khi bản ghi di chuyển vị trí, như trong trường hợp tổ chức file sơ cấp dựa trên phép băm Khi bucket bị tách, các con trỏ trong chỉ mục thứ cấp cần được cập nhật, gây ra khó khăn trong quản lý Để khắc phục, chúng ta có thể sử dụng chỉ mục logic với cấu trúc , trong đó K là giá trị cho chỉ mục thứ cấp và Kp là giá trị cho tổ chức file sơ cấp Bằng cách tìm kiếm chỉ mục thứ cấp dựa trên K, chương trình có thể truy cập bản ghi thông qua Kp, tạo ra một mức gián tiếp mới giữa cấu trúc truy cập và dữ liệu Chỉ mục logic phù hợp khi địa chỉ bản ghi vật lý thay đổi thường xuyên, mặc dù có chi phí tìm kiếm thêm từ tổ chức file sơ cấp.
Thảo luận
Trong nhiều hệ thống, chỉ mục không phải là phần thiết yếu của file dữ liệu và có thể được tạo ra hoặc loại bỏ linh hoạt, do đó thường được gọi là cấu trúc truy cập Khi cần truy cập file dựa trên các điều kiện tìm kiếm liên quan đến một trường cụ thể, hệ quản trị cơ sở dữ liệu có thể tạo chỉ mục trên trường đó Thông thường, chỉ mục thứ cấp được tạo ra để tránh việc sắp xếp vật lý các bản ghi trong file dữ liệu trên đĩa.
Chỉ mục thứ cấp có ưu điểm nổi bật là có thể được tạo ra cùng với hầu hết các tổ chức bản ghi sơ cấp, giúp bổ sung cho các phương pháp truy cập chính như sắp thứ tự hay băm, và có thể áp dụng cho các file hỗn hợp Để xây dựng một chỉ mục thứ cấp B+-tree, cần duyệt qua tất cả các bản ghi trong file để tạo các mục ở mức lá, sau đó sắp xếp và điền vào cây theo hệ số điền đã xác định Trong quá trình này, các mức chỉ mục khác cũng được tạo ra Tuy nhiên, việc tạo chỉ mục sơ cấp và chỉ mục cụm linh động gặp khó khăn và tốn kém hơn, vì các bản ghi phải được sắp xếp vật lý trên đĩa theo thứ tự của trường chỉ mục Một số hệ thống cho phép người dùng tạo các chỉ mục này linh hoạt trong quá trình sắp thứ tự file.
Một chỉ mục thường được sử dụng để đảm bảo ràng buộc khóa trên thuộc tính, giúp kiểm tra sự tồn tại của giá trị khóa trong file khi chèn bản ghi mới Nếu phát hiện có bản ghi khác trong cây chỉ mục có cùng giá trị khóa, phép chèn sẽ bị hủy bỏ.
Một file có chỉ mục thứ cấp trên mỗi trường thường được gọi là file đảo ngược đầy đủ (fully inverted file) Với tất cả các chỉ mục là thứ cấp, các bản ghi mới được chèn vào cuối file, dẫn đến việc file dữ liệu có bản chất không có thứ tự (file dạng đống – heap file) Các chỉ mục thường được triển khai dưới dạng B+-tree, cho phép cập nhật linh hoạt và phản ánh quá trình chèn hoặc xóa bản ghi Nhiều hệ quản trị cơ sở dữ liệu thương mại, như ADABAS của Software-AG, áp dụng phương pháp này rộng rãi.
Phương pháp tổ chức file phổ biến của IBM, ISAM, đã được đề cập trong phần 2 Bên cạnh đó, phương pháp truy cập vùng lưu trữ ảo (VSAM) của IBM cũng tương tự như cấu trúc truy cập B+-tree.