Giới Thiệu Về Clustered Index và Non-Clustered Index Trong SQL Server
Trong bài viết này, chúng ta sẽ cùng khám phá hai loại chỉ mục quan trọng trong SQL Server: Clustered Index và Non-Clustered Index. Việc hiểu rõ về hai khái niệm này có thể giúp bạn tối ưu hóa hiệu suất truy vấn cơ sở dữ liệu của mình.
1. Clustered Index Là Gì?
Định Nghĩa
Trong SQL Server, một clustered index là cấu trúc dữ liệu được sắp xếp theo thứ tự tăng dần hoặc giảm dần của các giá trị trên một hoặc nhiều cột trong bảng. Dữ liệu trong bảng được lưu trữ thực sự theo thứ tự này dựa trên khóa của clustered index.
Các Điểm Quan Trọng Cần Biết
- Sắp xếp dữ liệu: Dữ liệu trong bảng sẽ được tổ chức dựa trên khóa của clustered index. Điều này đồng nghĩa rằng các hàng trong bảng sẽ được sắp xếp theo thứ tự của khóa.
- Số lượng chỉ mục: Mỗi bảng chỉ có thể có duy nhất một clustered index. Nếu bạn tạo một clustered index mới cho bảng đã có, clustered index cũ sẽ được ghi đè.
- Tối ưu truy vấn: Khi thực hiện truy vấn truy cập dữ liệu theo thứ tự của khóa, clustered index có thể mang lại hiệu suất tốt hơn nhờ việc giảm thiểu việc di chuyển trên đĩa.
- Ảnh hưởng đến cấu trúc bảng: Sự hiện diện của clustered index có thể buộc SQL Server phải tổ chức lại dữ liệu khi có thêm hoặc cập nhật dữ liệu, dẫn đến overhead trong quá trình thao tác.
- Chọn khóa cho clustered index: Việc lựa chọn khóa cho clustered index là rất quan trọng, với các khóa duy nhất và không thay đổi là lựa chọn tối ưu.
- Tìm kiếm và quét dữ liệu: kho dữ liệu được sắp xếp theo khóa, việc tìm kiếm nhanh chóng và quét dữ liệu theo một khoảng nào đó được thực hiện hiệu quả hơn.
Ví Dụ Về Clustered Index
Giả sử bạn có bảng Employees
lưu trữ thông tin nhân viên và muốn tìm kiếm theo mã nhân viên (EmployeeID):
sql
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY CLUSTERED,
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
Department NVARCHAR(50),
Salary DECIMAL(10, 2)
);
Trong trường hợp này, EmployeeID là khóa chính và cũng là cột của clustered index. Việc tìm kiếm dựa trên EmployeeID sẽ được tối ưu hóa nhờ clustered index.
2. Non-Clustered Index Là Gì?
Định Nghĩa
Non-clustered index là một cấu trúc dữ liệu bổ sung được tạo ra trên một hoặc nhiều cột của bảng, nhằm cải thiện hiệu suất truy vấn mà không làm thay đổi thứ tự lưu trữ thực tế trong bảng.
Các Điểm Quan Trọng Cần Biết
- Không sắp xếp dữ liệu thực: Non-clustered index tạo ra một bản sao của dữ liệu và sắp xếp chúng dựa trên khóa của chỉ mục mà không làm thay đổi thứ tự trong bảng.
- Tăng hiệu suất truy vấn: Non-clustered index cho phép truy cập nhanh chóng đến dữ liệu dựa trên các cột không phải khóa chính, vì vậy cải thiện thời gian tìm kiếm.
- Sử dụng cho các truy vấn phức tạp: Chúng thích hợp với các truy vấn cần tìm kiếm, sắp xếp hoặc thống kê dữ liệu.
- Tăng thời gian ghi dữ liệu: Khi thực hiện các thao tác thêm, cập nhật hoặc xóa dữ liệu, thời gian thực hiện có thể tăng do SQL Server phải cập nhật các non-clustered index liên quan.
- Có thể tạo nhiều chỉ mục: Một bảng có thể có nhiều non-clustered index, tạo điều kiện tối ưu hóa cho nhiều loại truy vấn khác nhau.
- Bao gồm cột không lặp lại: Bạn có thể thêm cột không lặp lại vào non-clustered index để tối ưu hóa hơn nữa truy vấn cho các trường hợp cụ thể.
Ví Dụ Về Non-Clustered Index
Nếu bạn cần thường xuyên tìm kiếm nhân viên theo phòng ban, bạn có thể tạo một non-clustered index trên cột Department
:
sql
CREATE NONCLUSTERED INDEX IX_Department ON Employees(Department);
Khi thực hiện truy vấn tìm kiếm theo phòng ban, SQL Server sẽ sử dụng non-clustered index để tìm kiếm nhanh chóng dựa trên giá trị của cột Department
.
3. Tóm Tắt
- Clustered Index: Sử dụng cho các cột có giá trị duy nhất, giúp truy vấn nhanh chóng và hiệu quả.
- Non-Clustered Index: Thích hợp cho các cột không phải khóa chính cho các truy vấn tìm kiếm, sắp xếp, thống kê khác nhau.
Việc thiết kế và áp dụng cả hai loại chỉ mục này một cách hợp lý sẽ giúp nâng cao hiệu suất của ứng dụng và truy vấn cơ sở dữ liệu của bạn.
source: viblo