Chỉ mục (Index) và Chỉ mục toàn văn (Hướng dẫn thực hành)
Trang 1Chương 10 Chỉ mục (Index) và Chỉ mục toàn văn (Hướng dẫn thực hành)
Mục đích
Hoàn thành chương này bạn sẽ có thể:
Tạo được nhiều kiểu chỉ mục khác nhau
Xem và sửa đổi các chỉ mục của bảng
Sử dụng các chỉ mục trong các câu truy vấn dữ liệu
Xoá các chỉ mục
Tạo các chỉ mục toàn văn
Sử dụng các chỉ mục toàn văn và các câu truy vấn dữ liệu toàn văn
Sử dụng các từ khoá CONTAINS và FREETEXT
Các bước thực hành trong chương này đã được mô tả chi tiết và dễ hiểu, để thực hiện được học viên cần nắm được mục đích của chương và hiểu được cách sử dụng các công cụ Hãy chú ý làm theo các bước sau:
Phần I – Hướng dẫn Khoảng thời gian : 1 tiếng 30 phút 10.1 Các chỉ mục
Đôi khi những người sử dụng cần nhận về một khối lượng lớn dữ liệu từ các bảng trong
cơ sở dữ liệu trong thời gian ngắn nhất Các chỉ mục tạo ra nhằm tăng tốc độ truy cập dữ liệu trong các bảng Trong chương này, chúng ta sẽ học cách tạo ra nhiều kiểu chỉ mục khác nhau và xem xét cách sử dụng chúng
Các chỉ mục tăng cường tốc độ truy cập tới dữ liệu và đảm bảo tính duy nhất đối với các hàng (row) trong một bảng SQL Server hỗ trợ hai kiểu chỉ mục:
Kiểu Clustered
Kiểu Non-clustered
10.1.1 Tạo các chỉ mục
Các chỉ mục có thể được tạo bằng việc sử dụng chương trình Create Index Wizard sẵn có trong công cụ Enterprise Manager của SQL Server Chúng ta cũng có thể sử dụng CREATE INDEX cú pháp để tạo ra chỉ mục Hãy cùng xem các bước trong trình Create Index Wizard:
1 Nháy đúp chuột lên cơ sở dữ liệu Northwind
Một danh sách các đối tượng bên trong cơ sở dữ liệu Northwind được hiển thị
2 Nhấn chuột lên biểu tương Run a Wizard icon trên thanh công cụ hoặc có thể nhấn chuột vào Tools trên menu và chọn Wizards chức năng từ menu đổ xuống
3 Mở rộng lựa chọn Database.
Trang 2Một danh sách các wizard được hiển thị.
4 Chọn Create Index Wizard chức năng Nhấn chuột vào nút OK
Trình Create Index Wizard được hiển thị như hình 10.1.
Hình 10.1: Create Index Wizard
5 Nhấn nút Next.
6 Chọn cơ sở dữ liệu Northwind và đối tượng có tên Territories.
7 Sau khi chọn, nhấn nút Next.
Một danh sách các chỉ mục hiện tại của bảng Territories được hiển thị.
8 Nhấn nút Next.
9 Trong cột Include in Index, đánh dấu vào hộp sáng tương ứng với các cột TerritoryID và RegionID Nhấn nút Next.
10 Chọn chức năng Make this a clustered index Nhấn nút Next.
11 Gõ vào tên chỉ mục “Territories_Index”
Trang 312 Đảm bảo rằng các hộp sáng tương ứng với RegionID và TerritoryID trong
Columns included đã được đánh dấu Nhấn nút Move Up hoặc Move Down để
thay đổi nếu thấy cần thiết.
13 Nhấn nút Finish.
14 Hộp thoại Wizard Complete được hiển thị Nhấn nút OK
10.1.2 Xem và sửa đổi các chỉ mục
Khi một chỉ mục được tạo ra,, hệ số điền (fill factor) được xác định nhằm để ra các khoảng trống mở rộng và dành riêng một phần còn rỗi trên từng trang của chỉ mục
Chúng ta cùng sửa đổi chỉ mục Territories_Index để thiết lập hệ số điền của nó là 60.
Các bước để làm việc này trong công cụ Enterprise Manager:
1 Nhấn chuột phảỉ trên bảng Territories của cơ sở dữ liệu Northwind.
Một danh sách các chức năng được hiển thị
2 Chọn Manage Indexes… từ menu cha All Tasks.
Hộp thoại Manage Indexes được hiển hị như hình 10.2 Nó liệt kê các chỉ mục hiện tại trong bảng Territories.
Trang 4Hình 10.2: Hộp thoại Manage Indexes
3 Chọn Territories_Index và nhấn nút Edit….
Hộp thoại Edit Existing Index xuất hiện.
4 Đánh dấu vào ô Fill factor.
5 Đặt giá trị 60.
Hình 10.3 hiển thị sự thay đổi
Figure 10.3: Hộp thoại Edit Existing Index
6 Nhấn nút OK
7 Nhấn nút Close trong hộp thoại Manage Indexes.
10.1.3 Sử dụng các chỉ mục
SQL Server sử dụng công cụ tối ưu hoá truy vấn để quyết định cách thực hiện truy vấn
Trang 5chỉ ra chỉ mục được sử dụng Chúng ta cùng tạo một chỉ mục khác thuộc loại
non-clustered trên bảng Territories và đưa ra một câu truy vấn sử dụng chỉ mục Các bước
thực hiện công việc này trong công cụ Query Analyzer:
1 Chọn cơ sở dữ liệu Northwind trong trình Query Analyzer.
2 Thực hiện câu lệnh dưới đây:
CREATE NONCLUSTERED INDEX RegionID_index
ON Territories(RegionID)
Một chỉ mục có tên là RegionID_index được tạo ra trên bảng Territories Bảng Territories hiện tại có ba chỉ mục đã được định nghĩa, hai trong số đó do chúng ta tạo, và
một đã tồn tại
Bây giờ chúng ta sẽ đưa ra một câu truy vấn để xem các bản ghi trong bảng Territories
3 Thực hiện lệnh sau:
SELECT * FROM Territories
4 Chọn Display Estimated Execution Plan từ menu Query.
Chi phí của việc thực hiện câu truy vấn được hiển thị kèm theo tên của chỉ mục được hiển thị như hình 10.4
Hình 10.4: Quá trình thực hiện truy vấn
Di chuyển chuột lên vị trí bên trên tên của chỉ mục và hộp thông tin sẽ được hiển thị như hình 10.5 Nó cho chúng ta biết việc công cụ tối ưu hoá truy vấn của SQL Server chọn
lựa chỉ mục loại clustered, Territories_Index, để thực hiện truy vấn dữ liệu
Trang 6Hình 10.5: Hộp thông tin chỉ mục
Bây giờ chúng ta cùng chỉ ra cho công cụ tối ưu hoá biết chỉ mục được sử dụng trong câu truy vấn, và xem xét các thay đổi trong quá trình thực hiện
5 Thực hiện lệnh sau:
SELECT * FROM Territories (INDEX = RegionID_index)
6 Chọn Display Estimated Execution Plan từ menu Query.
Chỉ mục được sử dụng là chỉ mục loại non-clustered, RegionID_index, xem hình 10.6
Hình 10.6: Quá trình thực hiện truy vấn 10.1.4 Xoá các chỉ mục
Khi mục đích của việc sử dụng một chỉ mục đã đạt được, nó nên được xoá khỏi cơ sở dữ
Trang 71 Nhấn chuột phải vào bảng Territories trong cơ sở dữ liệu Northwind.
Một danh sách các chức năng được hiển thị
2 Chọn Manage Indexes… từ menu cha All Tasks.
Hộp thoại Manage Indexes xuất hiện.
3 Chọn RegionID_index và nhấn nút Delete.
4 Nhấn nút Yes để xác nhận lại.
5 Nhấn nút Close để đóng cửa sổ Manage Indexes.
10.1.5 Tạo ra các chỉ mục toàn văn (Full-Text Index)
Các chỉ mục toàn văn có thể được xây dựng dựa vào các chuỗi ký tự phi cấu trúc để cho phép tìm kiếm xâu kí tự Trình Full-Text Indexing Wizard trong Enterprise Manager được sử dụng để tạo ra các chỉ mục toàn văn Các câu truy vấn toàn văn có thể được đưa
ra trên bảng mà ở đó các chỉ mục đã được tạo Chúng ta cùng tạo ra các chỉ mục toàn văn
trên bảng Products của cơ sở dữ liệu Northwind Các bước tiến hành trong công cụ
Enterprise Manager như sau:
1 Nhấn chuột phải vào bảng Products trong cơ sở dữ liệu Northwind.
Một danh sách các chức năng xuất hiện
2 Chọn Define Full-Text Indexing on a Table… từ menu cha Full-Text Index
Table.
Chương trình Full-Text Indexing Wizard được khởi tạo như hình 10.7
Trang 8Hình 10.7: Full-Text Indexing Wizard
3 Nhấn nút Next.
Một chỉ mục toàn văn yêu cầu một cột ở đó giá trị khoá là duy nhất Cột ProductID trong bảng được liên kết với một chỉ mục loại clustered duy nhất có tên là PK_Products.
4 Chọn PK_Products từ danh sách Unique index và nhấn nút Next.
5 Đánh dấu hộp sáng bên cạnh cột có tên QuantityPerUnit để làm cho nó có thể được chọn trong các câu truy vấn toàn văn.
6 Nhấn nút Next.
7 Gõ “Products” vào trường Name của danh mục toàn văn và nhấn nút Next
8 Nhấn nút Next để bỏ qua bước Select or Create Population Schedules.
9 Nhấn nút Finish để tạo chỉ mục.
10 Nhấn OK trên hộp thoại xác nhận sự thành công của việc tạo chỉ mục.
Mặc dù chỉ mục toàn văn đã được tạo ra nhưng nó không thể được sử dụng Để làm cho
nó được sử dụng, chúng ta tiến hành các bước sau:
Trang 9Một danh sách các chức năng được hiển thị.
12 Chọn Start Full Population từ menu cha Full-Text Index Table.
Bây giờ chỉ mục toàn văn đã sẵn sàng để có thể sử dụng trong các câu truy vấn toàn văn
10.1.6 Sử dụng các chỉ mục toàn văn
Các câu truy vấn toàn văn có thể được đưa ra trên các bảng mà ở đó các chỉ mục toàn văn
đã được định nghĩa Các câu truy vấn toàn văn sử dụng các từ khoá CONTAINS và FREETEXT Chúng ta cùng thực hiện các câu truy vấn toàn văn trên bảng Products Các bước tiến hành trong Query Analyzer như sau:
1 Chọn cơ sở dữ liệu Northwind trong Query Analyzer.
2 Thực hiện lệnh sau:
SELECT ProductName, QuantityPerUnit FROM Products
WHERE CONTAINS(QuantityPerUnit,'"bottles" or "jars"') Kết quả được hiển thị như hình 10.8
Hình 10.8: Sử dụng từ khoá CONTAINS
3 Thực hiện lệnh sau:
SELECT ProductName, QuantityPerUnit FROM Products
WHERE FREETEXT(QuantityPerUnit,'bottles or jars')
Kết quả hiển thị giống như hình 10.8 mặc dù cách sử dụng hai từ khoá nói trên khác nhau
Trang 10Phần II – Bài tập Thời gian : 30 phút Thực hiện các công việc sau trong công cụ Enterprise Manager sử dụng cơ sở dữ liệu pubs :
1 Tạo ra một chỉ mục toàn văn trên cột notes của bảng titles sử dụng Full-Text Indexing
Wizard và làm cho nó có thể sử dụng được trong các câu truy vấn toàn văn
Thực hiện các công việc sau trong Query Analyzer sử dụng cơ sở dữ liệu pubs:
2 Tạo ra một chỉ mục loại clustered trên cột stor_id của bảng discounts sử dụng lệnh CREATE
INDEX
3 Tạo ra một chỉ mục loại non-clustered trên các cột emp_id và pub_id của bảng employee.
Thiết lập hệ số điền để các mức giữa và mức lá của các trang chỉ mục còn trống 25%
4 Xem tất cả các chỉ mục đã được tạo ra trên bảng sales sử dụng thủ tục lưu của hệ thống sp_helpindex.
5 Hiển thị các cột title và type cho tất cả các bản ghi trong bảng titles mà có chứa các từ
“recipes” hoặc “electronic” ở cột notes, sử dụng câu truy vấn toàn văn với từ khoá
CONTAINS hoặc FREETEXT
Phần III – Bài tập về nhà
Thực hiện các công việc sau trong the Query Analyzer sử dung cơ sở dữ liệu Northwind:
1 Tạo ra một chỉ mục non-clustered tên là Country_index cho bảng Suppliers trên các cột Country và city Bảo đảm các trang chỉ mục còn trống 50 % và bất kỳ chỉ mục nào trùng tên
đã có trong hệ thống phải được xoá
2 Hiển thị cột CompanyName cho các bản ghi có giá trị cột Country = ‘France’ trong bảng Suppliers Yêu cầu công cụ tối ưu hoá truy vấn sử dụng chỉ mục có tên là Country_index.