Tải bản đầy đủ (.doc) (14 trang)

Chỉ mục và các chỉ mục toàn văn

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 (181.81 KB, 14 trang )

Chương 9 Chỉ mục và chỉ mục toàn văn
Mục tiêu bài học:
Cuối bài học này, bạn có thể:
 Định nghĩa một chỉ mục
 Hiểu được quá trình tạo chỉ mục
 Định nghĩa chỉ mục Clustered và chỉ mục Non-Clustered với các đặc tính duy nhất và phức
hợp
 Xem các chỉ mục của bảng
 Nắm vững cách sử dụng chỉ mục
 Xoá các chỉ mục
 Hiểu rõ tìm kiếm toàn văn và các chỉ mục toàn văn
 Hiểu rõ cách sử dụng các từ khoá CONTAINS và FREETEXT trong các câu truy vấn toàn
văn
Giới thiệu
Ở chương trước, chúng ta đã được học về các giao dịch và các cơ chế khoá bản ghi. Khái niệm về
các giao dịch, lợi ích của nhật ký các giao dịch và các cơ chế khoá bản ghi được đề cập rất sâu.
Các cơ chếkhoá chết bản ghi và việc sử lý các cơ chế khoá chết cũng được đề cập ở chương
trước.
Các chỉ mục làm cho việc truy nhập tới các hàng của một bảng dựa vào giá trị của một hoặc nhiều
cột trở nên nhanh. Chúng cung cấp một thứ tự logic cho dữ liệu trong các bảng. Một chỉ mục hợp
lý có thể nâng cao khả năng thực thi của cơ sở dữ liệu bằng việc giảm thiểu thời gian truy nhập.
Trong chương này chúng ta sẽ học về các chỉ mục.
9.1 Các chỉ mục
Các chỉ mục trong SQL Server tương tự như các chỉ mục sách. Khi các thông tin về một chủ đề
đưa ra được yêu cầu từ một quyển sách, chúng ta không tìm từ trang thứ nhất đến trang cuối
cùng. Thay vì như thế, chúng ta sẽ định vị chủ đề đưa ra dựa trên các chỉ mục ở cuối cuốn sách.
Chỉ mục trợ giúp cho việc tìm kiếm nhanh thông tin mà không cần phải đọc hết toàn bộ cuốn
sách. Trong một cơ sở dữ liệu, một chỉ mục cho phép chương trình tìm kiếm các dữ liệu cần thiết
mà không cần duyệt toàn bộ bảng. Chỉ mục được duyệt để tìm một giá trị đặc biệt. Sau đó con trỏ
chỉ mục được dùng để định vị và nhận lấy hàng chứa giá trị yêu cầu trong bảng. Con trỏ này được
tham chiếu đến như khoảng chừa trống (offset). Vì vậy, sử dụng chỉ mục để truy nhập thông tin


trở nên nhanh hơn nhiều so với truy nhập dữ liệu trực tiếp.
Điển hình là một chỉ mục sách chứa danh sách các từ khoá (tương đương các khoá) sắp xếp theo
thứ tự alphabetic và số trang (tương đương con trỏ) mà ở đó chứa chủ để được đề cập đến trong
cuốn sách. Hình 9.1 hiển thị một ví dụ về chỉ mục của sách.
120 Thiết kế cơ sở dữ liệu và thực hành với SQL Server
Hình 9.1: Ví dụ về chỉ mục sách
Mặc dù hầu hết các cuốn sách chứa một chỉ mục đơn, một số cuốn sách chứa các đa chỉ mục. Ví
dụ, một cuốn sách về âm nhạc có thể có một chỉ mục cho các ca sĩ và một chỉ mục khác cho các
bài hát. Khái niệm về chỉ mục cơ sở dữ liệu cũng tương tự như vậy. Các đa chỉ mục có thể được
tạo ra trên một bảng đơn tuỳ theo yêu cầu. Ví dụ, bảng titles của cơ sở dữ liệu pubs sẽ được đánh
chỉ mục theo ID của nhà xuất bản hoặc kết hợp ID của nhà xuất bản và ID của tiêu đề.
Các chỉ mục cơ sở dữ liệu chứa một danh sách các giá trị của cột đơn hoặc nhiều cột của bảng
(các khoá) và địa chỉ của các trang dữ liệu (các con trỏ) mà tại đó dữ liệu được lưu trữ. Một chỉ
mục có thể được tạo cho một trường đơn hoặc một tập hợp các trường. SQL Server tự động tạo ra
các chỉ mục cho các kiểu ràng buộc như các ràng buộc PRIMARY KEY và UNIQUE.

Các chỉ mục không mang tính bắt buộc, nhưng nếu dữ liệu trong các bảng được truy nhập mà
không có chỉ mục thì việc tìm kiếm có thể mất rất nhiều thời gian. SQL Server sử dụng thành
phần tối ưu hoá truy vấn để tìm ra cách hiệu quả nhất khi thực hiện một câu truy vấn, và thành
phần này dựa vào các chỉ mục. Tiện ích tối ưu hoá truy vấn (Query Optimizer) là một công cụ
thông minh, luôn thiết lập phương pháp tốt nhất để nhận lấy dữ liệu yêu cầu thông qua các câu
truy vấn.
Tuy nhiên, những lợi ích về mặt thực thi trong cơ sở dữ liệu khi sử dụng chỉ mục luôn đi kèm với
một chi phí. Các bảng với các chỉ mục yêu cầu thêm các vùng lưu trữ trong cơ sở dữ liệu. Các
lệnh xử lý dữ liệu cần thêm thời gian vì chúng cần cập nhật chỉ mục. Khi các chỉ mục được thiết
kế và tạo ra, nó cần phải đảm bảo rằng các ích lợi về việc thực thi luôn lớn hơn chi phí dùng cho
việc lưu trữ nó.
9.1.1 Tạo chỉ mục
Câu lệnh CREATE INDEX được sử dụng để tạo ra chỉ mục trên bảng. Câu lệnh hoặc thay đổi thứ
tự vật lý của bảng, hoặc đưa ra việc tối ưu hoá truy vấn với một thứ tự logic của bảng nhằm tăng

hiệu quả cho các câu truy vấn. Chỉ có quyền sở hữu bảng mới có thể tạo các chỉ mục trên bảng.
121 Thiết kế cơ sở dữ liệu và thực hành với SQL Server
A
Access, 408
Action menu, 335
Active status, 408
Administration table tools, 23-24
Advanced query techniques, 216-218
B
BACKUP, 498
Base data type, 105
Base table, 110
Binary data type, 112
Bit data type, 113
Số trang: Các con trỏ
Các chủ đề: Các khoá
Cú pháp của lệnh CREATE INDEX là:
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX index_name
ON table_name (column_name[, column_name]…)
[WITH
[PAD_INDEX]
[[,]FILLFACTOR=x]
[[,]DROP_EXISTING]
]
trong đó:
 UNIQUE chỉ ra rằng không bao giờ hai hàng có chung một giá trị chỉ mục.
 [CLUSTERED][NONCLUSTERED] là các kiểu chỉ mục khác nhau.
 PAD_INDEX chỉ ra khoảng trống còn lại mở ra trong mỗi trang ở mức trung của chỉ mục.
Tuỳ chọn PAD_INDEX chỉ hữu ích khi FILLFACTOR (hệ số điền) được xác định, bởi vì
PAD_INDEX sử dụng tỷ lệ được xác định bởi hệ số điền.

 FILLFACTOR là một giá trị từ 0 đến 100 mà xác định phần trăm để trống của trang chỉ mục.
 DROP_EXISTING xoá một chỉ mục nào đó có cùng tên trong hệ thống.
9.1.2 Nguyên tắc tạo chỉ mục
Nói chung, các cột để tạo chỉ mục nên được chọn lựa cẩn thận. Một chỉ mục không nên được tạo
trên một cột với chỉ hai hoặc một số ít các giá trị riêng biệt, vì quá nhiều hàng có khả năng được
lựa chọn cho cùng một khoảng chừa trống (offset). Một cột có thể được chọn để tạo chỉ mục dựa
trên các quy tắc dưới đây:
 Cột được sử dụng cho việc tìm kiếm một cách thường xuyên.
 Cột được sử dụng cho việc sắp xếp dữ liệu.
Không đánh chỉ mục các cột trong các trường hợp sau:
 Cột chỉ chứa một vài các giá trị duy nhất.
 Bảng chỉ chứa một vài hàng. Việc đánh chỉ mục trên các bảng nhỏ có thể không là tối ưu vì
nó khiến cho SQL Server mất nhiều thời gian để duyệt chỉ mục để tìm kiếm dữ liệu hơn là
thực hiện việc tìm kiếm tuần tự từng hàng trong bảng.
9.1.3 Hệ số điền (Fill Factor)
Hệ số điền được xác định tại thời điểm tạo một chỉ mục.
Khi một chỉ mục clustered được tạo, dữ liệu trong bảng được lưu trữ trong các trang dữ liệu của
cơ sở dữ liệu theo thứ tự của các giá trị trong các cột chỉ mục. Khi các bản ghi mới được thêm
vào trong bảng hoặc các giá trị trong các cột chỉ mục thay đổi, SQL Server có thể phải tổ chức lại
các mẫu dữ liệu được lưu trữ trong bảng để tạo ra chỗ cho các bản ghi mới và duy trì sự lưu trữ
dữ liệu được sắp xếp. Điều này cũng được áp dụng cho chỉ mục non-clustered.
Khi dữ liệu được thêm vào hoặc thay đổi, SQL Server có thể phải tổ chức lại việc lưu trữ dữ liệu
trong trang chỉ mục non-clustered. Trong khi thêm mới một hàng vào một trang chỉ mục đầy đủ,
Chỉ mục và chỉ mục toàn văn 122
SQL Server sẽ chuyển khoảng chừng một nửa tổng số các hàng đến một trang mới để tạo chỗ cho
hàng mới. Kiểu tổ chức lại dữ liệu này được gọi là phân trang. Điều này có thể ảnh hưởng tới
tốc độ thực thi và phá vỡ việc lưu trữ dữ liệu trong bảng.
Khi một chỉ mục được tạo, hệ số điền được xác định để dành ra các vùng trống mở rộng và dự trữ
một phần không sử dụng trong từng trang chỉ mục. Nó để dành các vùng lưu trữ cho việc mở
rộng dữ liệu của bảng trong tương lai và giảm thiểu công việc phân trang có thể.

Giá trị của hệ số điền là một giá trị từ 0 đến 100 được tính bằng đơn vị phần trăm, xác định dữ
liệu được đưa vào các trang sau khi chỉ mục được tạo. Giá trị 100 có nghĩa là các trang sẽ bị đầy
và sẽ chiếm giữ vùng lưu trữ nhỏ nhất. Thiết lập này chỉ nên sử dụng khi bảng không có thay đổi
nào về dữ liệu chẳng hạn như một bảng chỉ đọc. Một giá trị nhỏ hơn 100 sẽ giảm thiểu nhu cầu
phân trang khi các chỉ mục lớn lên nhưng đòi hỏi tốn nhiều vùng lưu trữ hơn. Những thiết lập này
phù hợp với những bảng dữ liệu hay phải thay đổi.
9.2 Các kiểu chỉ mục
Sau khi hiểu rõ việc tạo chỉ mục, chúng ta tiếp tục với các khái niệm về các kiểu chỉ mục dưới
đây.
 Chỉ mục Clustered
 Chỉ mục Non-clustered
9.2.1 Chỉ mục Clustered
Một chỉ mục clustered xác định thứ tự lưu trữ của dữ liệu trong một bảng. Một bảng có thể có chỉ
một chỉ mục clustered bởi vì chỉ mục clustered xác định thứ tự lưu trữ vật lý của dữ liệu. Tuy
nhiên, chỉ mục có thể bao gồm nhiều cột, giống như cách thức sắp xếp bằng họ và tên của thư
mục điện thoại. Ví dụ, các bản ghi của bảng roysched trong cơ sở dữ liệu pubs không được sắp
xếp. Để tạo một chỉ mục clustered trên trường title_id, câu lệnh sẽ là:
CREATE CLUSTERED
INDEX CLINDX_titleid ON roysched (title_id)
Sau khi tạo chỉ mục, dữ liệu trong cột title_id được sắp xếp bằng cách định vị lại tất cả các bản
ghi. Hình 9.2 và 9.3 hiển thị nội dung của bảng trước và sau khi tạo chỉ mục.
123 Thiết kế cơ sở dữ liệu và thực hành với SQL Server
Hình 9.2: Bảng roysched trước khi tạo chỉ mục Clustered
Hình 9.3: Bảng Roysched sau khi tạo chỉ mục Clustered
Một chỉ mục clustered có hiệu quả đối với các cột được truy nhập dữ liệu thường xuyên. Mỗi khi
giá trị của hàng đầu tiên được tìm thấy bằng chỉ mục clustered, các hàng với các giá trị chỉ mục
tiếp theo chắc chắn sẽ nằm ở vị trí vật lý tiếp theo.
Ví dụ, một ứng dụng thường xuyên yêu cầu nhận về các bản ghi giữa hai ngày, một chỉ mục
clustered có thể xác định nhanh chóng hàng chứa ngày bắt đầu, và sau đó nhận về tất cả các hàng
tiếp theo trong bảng cho đến khi tìm thấy ngày kết thúc. Điều này có thể cải thiện tốc độ thực thi.

Thêm nữa, nếu một cột được sử dụng thường xuyên để sắp xếp dữ liệu, việc tập hợp lại các cột
của bảng để tiết kiệm chi phí sắp xếp mỗi khi các cột được truy nhập là rất thuận lợi.
Các chỉ mục Clustered cũng có hiệu quả để tìm kiếm một hàng xác định khi giá trị của chỉ mục là
duy nhất. Ví dụ, cách nhanh nhất để tìm một nhân viên sử dụng trường Employee_Id sẽ là tạo một
chỉ mục clustered hoặc sử dụng ràng buộc PRIMARY KEY trên cột Employee_Id.
Ghi chú: Ràng buộc PRIMARY KEY tự động tạo chỉ mục clustered nếu một chỉ mục clustered
không tồn tại trên bảng.
Chỉ mục và chỉ mục toàn văn 124

×