+5

Vai Trò và Tầm Quan Trọng của "Indexes" Trong Tối Ưu Hóa Truy vấn Cơ Sở Dữ Liệu

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, indexcũng có thể cải thiện hiệu suất của cá hoạt động GROUP 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ới Smith

  • 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.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.