1 Khái quát về Index
Các Index rất quan trọng trong các hệ thống cơ sở dữ liệu vì chúng nâng cao đáng kể hiệu quả xử lý truy vấn. Dưới dây là những lý do chúng được sử dụng.
1.1 Cải thiện hiệu suất truy vấn
- Tăng tốc độ truy xuất dữ liệu: Index cung cấp cách tra cứu dữ liệu nhanh chóng bằng cách giảm số lượng trang dữ liệu hoặc bản ghi cần quét. Thay vì quét toàn bộ bảng, cơ sở dữ liệu có thể nhanh chóng định vị dữ liệu được lập index.
- Truy cập nhanh: chúng cho phép truy cập vào các hàng trong bảng dựa trên giá trị của một hoặc nhiều cột. Điều này đặc biệt có lợi cho các truy vấn liên quan đến việc tìm kiếm một giá trị hoặc phamj vi giá trị cụ thể.
1.2 Lọc hiệu quả (Efficient Filtering)
- WHERE Clause:
Index
cải thiện hiệu suất của truy vấn với mệnh đềWHERE
bằng các phép cơ sở dữ liệu nhanh chóng xác định vị trí các hàng khớp với tiêu chí. - Truy vấn phạm vi: Chúng đặc biệt hiệu quả đối với các truy vấn phạm vi (vd:
BETWEEN
,>
,<
), cho phép lọc dữ liệu hiệu quả.
1.3 Sắp xếp nâng cao
- ORDER BY:
Index
giúp sắp xếp dữ liệu một cách hiệu quả. Nếu một index được tạo trên một cột được sử dungj trong mệnh đềORDER BY
, cơ sở dữ liệu có thể truy xuất dữ liệu đã xếp trực tiếp từindex
. - GROUP BY: Tương tự như sắp xếp,
index
cũng có thể cải thiện hiệu suất của cá hoạt độngGROUP BY
.
1.4 Faster Joins
- Join Operation:
Indexes
trên các * join column* có thể cải thiện đáng kể hiệu suất của các thao tác JOIN bằng cách cho phép cơ sở dữ liệu nhanh chóng tìm thấy các hàng khớp từ các bảng đã nối.
1.5 Tối ưu hóa Aggregate Functions
- Aggregates:
Indexes
có thể nâng cao hiệu suất của các hàm tổng hợp nhưCOUNT
,SUM
,AVG
, v.v) bằng cách truy cập nhanh vào các cột được lập chỉ mục.
1.6 Primary and Unique keys
- Thực thi: Các chỉ mục được sử dụng để thực thi các ràng buộc Primary và Unique key, đảm bảo tính toàn vẹn và duy nhất cảu dữ liệu trong database.
2. Cách hoạt động của Index
2.1 Data Structure
Indexes
thường được triển khai bằng cách sử dụng các cấu trúc dữ liệu như B-trees hoặc hash tables. B-Trees là cấu trúc cây cân bằng cho phép thực hiện các theo tác chèn, xóa và tra cứu hiệu quả.- Một số cơ sở dữ liệu cũng hỗ trợ
Index bitmap
, rất hữu ích cho các cột có số lượng giá trị riêng biệt hạn chế.
2.2 Các loại Index
-
Clustered Index: Các hàng dữ liệu được lưu trữ theo thứ tự các khóa index. Mỗi bảng chỉ có thể có một Index được nhóm vì bản thân các hàng dữ liệu đã được sắp xếp.
- Usage: Tạo một clustered Index trên mỗi bảng, thường là trên Primary key.
- Benefit: Vì các hàng dữ liệu được lưu trữ theo thứ tự nên các truy vấn truy xuất một phạm vi giá trị có thể mang lại lợi ích rất lớn.
CREATE CLUSTERED INDEX idx_orders_orderdate ON Orders(OrderDate);
-
Non-Clustered Index: Chứa danh sách được sắp xếp các giá trị khóa và con trỏ tới các hàng dữ liệu tương ứng. Một bảng có thể có nhiều Index không được nhóm
- Usage: Tạo các Non-Clustered Index trên các cột thường xuyên đực truy vấn, đặc biệt là các Index được sử dụng trong mệnh đề WHERE, JOINS và Sorting Operations.
- Benefit: Cung cấp khả năng tra cứu nhanh chóng mà không ảnh hưởng đến thứ tự dữ liệu
CREATE NONCLUSTERED INDEX idx_orders_customerid ON Orders(CustomerID);
Example Scenario
Xem xét một bảng Employees
với EmployeeID
, FirstNamem
, LastName
, và DepartmentID
.Giả sử bạn thường xuyên truy vấn bảng để tìm nhân viên theo họ.
-
Không có Index:
SELECT * FROM Employees WHERE LastName = 'Smith';
Cơ sở dữ liệu phải quét toàn bộ bảng, kiểm tra từng hàng để nối
LastName
vớiSmith
-
Có Index:
CREATE INDEX idx_lastname ON Employees(LastName);
Khi Index được tạo trên cột
LastName
, sơ sở dữ liệu có thể nhanh chóng định vị tất cả bản ghi có họ 'Smith' bằng cách sử dụng Index, tăng tốc đáng kể truy vấn.