SQL - Chỉ mục không Clustered

Xin chào, những người đam mê SQL! Hôm nay, chúng ta sẽ cùng khám phá thế giới thú vị của Chỉ mục không Clustered. Đừng lo lắng nếu bạn mới bắt đầu học lập trình; tôi sẽ hướng dẫn bạn từng bước về khái niệm này, giống như tôi đã làm cho hàng trăm học sinh trong những năm dạy học của mình. Nào, hãy cầm một tách cà phê và cùng nhau bắt đầu hành trình học tập này nhé!

SQL - Non-Clustered Index

Chỉ mục không Clustered là gì?

Hãy tưởng tượng bạn đang ở trong một thư viện (đúng vậy, chúng vẫn còn tồn tại!). Các sách được sắp xếp trên kệ theo một thứ tự cụ thể - điều này tương tự như cách dữ liệu được lưu trữ trong một bảng. Bây giờ, hãy nghĩ về các thẻ mục lục trong thư viện. Những thẻ này không thay đổi thứ tự của sách, nhưng chúng cung cấp một cách nhanh chóng để tìm kiếm sách bạn muốn. Đó chính xác là điều mà một Chỉ mục không Clustered làm trong SQL!

Chỉ mục không Clustered là một cấu trúc riêng biệt từ các hàng dữ liệu, cung cấp một cách hiệu quả để tra cứu dữ liệu dựa trên các cột được chỉ mục. Nó không thay đổi thứ tự vật lý của dữ liệu trong bảng nhưng tạo ra một danh sách riêng biệt chỉ đến dữ liệu.

Các đặc điểm chính của Chỉ mục không Clustered:

  1. Tách biệt từ dữ liệu: Khác với các Chỉ mục Clustered, Chỉ mục không Clustered không xác định thứ tự vật lý của dữ liệu trong bảng.
  2. Nhiều chỉ mục: Bạn có thể có nhiều Chỉ mục không Clustered trên một bảng duy nhất.
  3. Tăng tốc truy vấn: Chúng có thể làm cho việc truy xuất dữ liệu nhanh hơn đáng kể cho các truy vấn cụ thể.
  4. Dung lượng lưu trữ thêm: Chúng yêu cầu thêm không gian lưu trữ vì chúng tách biệt từ dữ liệu bảng.

Tạo một Chỉ mục không Clustered cơ bản

Hãy bắt đầu với một ví dụ đơn giản. Giả sử chúng ta có một bảng gọi là Employees:

CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Email VARCHAR(100),
Department VARCHAR(50)
);

Bây giờ, giả sử chúng ta thường xuyên tìm kiếm nhân viên theo họ. Chúng ta có thể tạo một Chỉ mục không Clustered trên cột LastName:

CREATE NONCLUSTERED INDEX IX_Employees_LastName
ON Employees (LastName);

Dưới đây là những gì đoạn mã này làm:

  • CREATE NONCLUSTERED INDEX: Điều này告诉 SQL Server chúng ta muốn tạo một Chỉ mục không Clustered.
  • IX_Employees_LastName: Đây là tên chúng ta đặt cho chỉ mục của mình. Nó là một thói quen tốt để sử dụng một quy tắc đặt tên bao gồm tên bảng và cột(s) được chỉ mục.
  • ON Employees (LastName): Điều này xác định bảng và cột(s) nào chúng ta đang chỉ mục.

Sau khi tạo chỉ mục này, các truy vấn tìm kiếm theo LastName thường sẽ nhanh hơn nhiều!

SQL Chỉ mục không Clustered trong hành động

Hãy xem chỉ mục mới của chúng ta ảnh hưởng như thế nào đến hiệu suất truy vấn. Giả sử chúng ta muốn tìm tất cả các nhân viên có họ là "Smith":

SELECT * FROM Employees WHERE LastName = 'Smith';

Trước khi chúng ta tạo chỉ mục, SQL Server sẽ phải quét toàn bộ bảng để tìm các hàng khớp. Nhưng bây giờ, với chỉ mục không Clustered của chúng ta, nó có thể nhanh chóng định vị các hàng liên quan bằng cách sử dụng chỉ mục, sau đó lấy dữ liệu hàng đầy đủ. Điều này giống như sử dụng thư viện catalog để tìm một cuốn sách thay vì đi qua mỗi kệ!

Tạo Chỉ mục không Clustered trên nhiều cột

Đôi khi, chúng ta có thể muốn chỉ mục nhiều cột. Ví dụ, nếu chúng ta thường xuyên tìm kiếm nhân viên theo cả LastName và FirstName, chúng ta có thể tạo một Chỉ mục không Clustered phức hợp:

CREATE NONCLUSTERED INDEX IX_Employees_LastName_FirstName
ON Employees (LastName, FirstName);

Chỉ mục này sẽ đặc biệt hữu ích cho các truy vấn như:

SELECT * FROM Employees WHERE LastName = 'Smith' AND FirstName = 'John';

Thứ tự của các cột trong một chỉ mục phức hợp quan trọng. Trong trường hợp này, chỉ mục sẽ hiệu quả nhất cho các truy vấn lọc theo LastName, hoặc cả LastName và FirstName. Nó sẽ không hữu ích như vậy cho các truy vấn chỉ lọc theo FirstName.

Lời cảnh báo

Mặc dù các chỉ mục có thể cải thiện hiệu suất truy vấn đáng kể, chúng không phải là giải pháp "tạo và quên". Mỗi chỉ mục yêu cầu thêm không gian lưu trữ và có thể làm chậm các thao tác dữ liệu (chèn, cập nhật và xóa). Tất cả là về sự cân bằng - như cố gắng giữ bàn làm việc của bạn ngăn nắp mà không dành cả ngày để dọn dẹp!

Các khái niệm nâng cao về Chỉ mục không Clustered

Bây giờ chúng ta đã覆盖 cơ bản, hãy khám phá một số khái niệm nâng cao:

Bao gồm các cột

Đôi khi, chúng ta muốn chỉ mục một cột nhưng cũng bao gồm các cột bổ sung trong chỉ mục mà không làm chúng thành phần của khóa:

CREATE NONCLUSTERED INDEX IX_Employees_LastName_Include_Email
ON Employees (LastName)
INCLUDE (Email);

Điều này có thể rất hữu ích khi bạn thường xuyên chạy các truy vấn như:

SELECT LastName, Email FROM Employees WHERE LastName = 'Smith';

Truy vấn này có thể được satisfed hoàn toàn từ chỉ mục mà không cần tra cứu hàng dữ liệu thực tế!

Chỉ mục lọc

Chỉ mục lọc là các chỉ mục từng phần bao gồm chỉ một phần dữ liệu trong bảng. Chúng rất hữu ích cho các bảng mà bạn thường xuyên truy vấn một tập hợp dữ liệu cụ thể:

CREATE NONCLUSTERED INDEX IX_Employees_IT_Department
ON Employees (EmployeeID, LastName)
WHERE Department = 'IT';

Chỉ mục này sẽ chỉ bao gồm các nhân viên trong phòng ban IT, làm cho các truy vấn cho nhân viên IT nhanh như chớp!

Các nguyên tắc tốt nhất cho Chỉ mục không Clustered

Dưới đây là bảng tóm tắt một số nguyên tắc tốt nhất cho việc sử dụng Chỉ mục không Clustered:

Nguyên tắc tốt nhất Mô tả
Chỉ mục các cột chọn lọc Các cột có nhiều giá trị duy nhất là ứng cử viên tốt cho việc chỉ mục
Xem xét các mẫu truy vấn Tạo chỉ mục hỗ trợ các truy vấn phổ biến và quan trọng nhất của bạn
Tránh việc chỉ mục quá nhiều Quá nhiều chỉ mục có thể làm chậm các thao tác dữ liệu
Bảo trì các chỉ mục Thường xuyên重建 hoặc tổ chức lại các chỉ mục để giữ cho chúng hiệu quả
Sử dụng các chỉ mục bao gồm Bao gồm các cột trong chỉ mục để tránh tra cứu hàng dữ liệu khi có thể
Theo dõi sử dụng chỉ mục Thường xuyên kiểm tra哪些索引被使用以及哪些没有被使用

Nhớ rằng việc tạo các chỉ mục hiệu quả là một phần khoa học, một phần nghệ thuật. Nó đòi hỏi sự thực hành và kinh nghiệm để làm đúng!

Kết luận

Và thế là bạn đã có nó, các bạn! Chúng ta đã cùng nhau hành trình qua vùng đất của Chỉ mục không Clustered, từ cơ bản đến một số khái niệm nâng cao. Các công cụ mạnh mẽ này có thể tăng tốc độ truy vấn của bạn đáng kể khi được sử dụng khôn ngoan.

Khi tiếp tục hành trình SQL của bạn, hãy nhớ rằng các chỉ mục giống như gia vị trong nấu ăn - sử dụng chúng một cáchThoughtful để cải thiện hiệu suất cơ sở dữ liệu của bạn, nhưng đừng lạm dụng!

Tiếp tục thực hành, giữ sự tò mò, và trước khi bạn biết, bạn sẽ trở thành một phù thủy chỉ mục SQL. Chúc mừng coding!

Credits: Image by storyset