0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Chỉ mục trong cơ sở dữ liệu: Định nghĩa, loại và cách hoạt động

Đăng vào 1 tuần trước

• 7 phút đọc

Chủ đề:

cloud database

Trong cơ sở dữ liệu, chỉ mục là một cấu trúc dữ liệu giúp tăng tốc độ truy xuất dữ liệu trên bảng, với một chút chi phí cho không gian lưu trữ và thời gian ghi. Nó tương tự như một chỉ mục trong sách, giúp bạn tìm thông tin cụ thể nhanh chóng mà không cần phải quét qua từng trang.

1. Những điểm chính về chỉ mục:

  • Mục đích: Chỉ mục được sử dụng để làm cho việc tìm kiếm và truy vấn nhanh hơn. Nếu không có chỉ mục, cơ sở dữ liệu phải quét toàn bộ bảng (gọi là quét toàn bảng) để tìm các hàng liên quan, điều này có thể rất chậm, đặc biệt là với các tập dữ liệu lớn.
  • Cấu trúc: Hầu hết các chỉ mục thường được thực hiện bằng B-trees hoặc bảng băm.
  • Chỉ mục chính: Tự động được tạo ra khi một khóa chính được định nghĩa trên một bảng. Điều này đảm bảo rằng việc tìm kiếm một bản ghi dựa trên khóa chính diễn ra nhanh chóng.
  • Chỉ mục phụ: Đây là những chỉ mục bổ sung mà bạn có thể tạo trên các cột khác để tăng tốc độ truy vấn dựa trên các cột đó (ví dụ, tạo một chỉ mục trên trường "email" của bảng người dùng).
  • Trao đổi: Nhanh hơn khi đọc: Các truy vấn sử dụng các cột đã được chỉ mục sẽ nhanh hơn nhiều. Chậm hơn khi ghi: Mỗi khi dữ liệu được chèn, cập nhật hoặc xóa, các chỉ mục cũng phải được cập nhật, điều này có thể làm chậm các thao tác ghi. Chi phí không gian: Các chỉ mục chiếm thêm không gian lưu trữ.

2. Các loại chỉ mục

Các chỉ mục có nhiều loại khác nhau, mỗi loại phục vụ một mục đích cụ thể:

- Chỉ mục đơn cột:

Chỉ mục này được tạo cho một cột duy nhất trong bảng. Nó hữu ích khi các truy vấn thường lọc hoặc tìm kiếm dựa trên một cột cụ thể.
CREATE INDEX idx_customer_email ON Customers (email);

- Chỉ mục tổ hợp (Chỉ mục nhiều cột):

Chỉ mục bao gồm nhiều cột. Điều này có lợi khi các truy vấn thường lọc hoặc tìm kiếm bằng sự kết hợp của nhiều cột. Thứ tự của các cột trong chỉ mục tổ hợp rất quan trọng.
CREATE INDEX idx_customer_name_email ON Customers (name, email);

- Chỉ mục duy nhất:

Đảm bảo rằng các cột đã được chỉ mục chứa các giá trị duy nhất trên tất cả các hàng. Điều này thường được sử dụng khi một cột cần giữ các giá trị khác nhau (ví dụ, địa chỉ email).
CREATE UNIQUE INDEX idx_unique_email ON Customers (email);

- Chỉ mục toàn văn:

Sử dụng để tăng tốc độ tìm kiếm liên quan đến dữ liệu văn bản lớn, cho phép tìm kiếm từ khóa hiệu quả. Thường có trong các ứng dụng chứa nhiều tài liệu.
CREATE FULLTEXT INDEX idx_fulltext_bio ON Users (biography);

3. Cách thức hoạt động của chỉ mục nội bộ

- Chỉ mục B-Tree:

Loại phổ biến nhất. Dữ liệu được tổ chức trong một cấu trúc cây cân bằng, cho phép cơ sở dữ liệu thực hiện tìm kiếm, chèn và truy vấn khoảng nhanh chóng.

- Chỉ mục băm:

Sử dụng bảng băm, rất hiệu quả cho các truy vấn tìm kiếm chính xác (ví dụ, tìm một hàng theo id chính xác), nhưng không phù hợp cho các truy vấn dạng khoảng.

4. Các yếu tố cần xem xét về hiệu suất

- Hiệu suất đọc:

Chỉ mục cải thiện hiệu suất đọc một cách đáng kể bằng cách giảm lượng dữ liệu mà động cơ cơ sở dữ liệu phải quét. Ví dụ, việc tìm kiếm các bản ghi dựa trên một cột đã được chỉ mục yêu cầu động cơ quét chỉ mục thay vì toàn bộ bảng.

- Hiệu suất ghi:

Trong khi chỉ mục cải thiện hiệu suất đọc, chúng có thể làm chậm các thao tác ghi (chèn, cập nhật và xóa). Mỗi khi dữ liệu được thay đổi, chỉ mục cũng cần được cập nhật, điều này tạo ra thêm gánh nặng.

- Tiêu thụ không gian:

Chỉ mục chiếm thêm không gian lưu trữ, có thể tăng lên đáng kể cho các bảng lớn với nhiều chỉ mục.

5. Khi nào nên sử dụng chỉ mục

- Truy vấn thường xuyên:

Thêm các chỉ mục cho các cột thường xuyên được sử dụng trong các điều khoản WHERE, điều kiện JOIN hoặc sắp xếp (ORDER BY).

- Bảng lớn:

Đối với các bộ dữ liệu rất lớn, các chỉ mục rất quan trọng để ngăn chặn hiệu suất truy vấn chậm lại.

- Tránh chỉ mục quá nhiều:

Thêm quá nhiều chỉ mục có thể gây hại cho hiệu suất ghi và tiêu tốn nhiều không gian đĩa hơn. Cần phải tìm kiếm sự cân bằng dựa trên các mô hình truy vấn cụ thể của ứng dụng.

6. Quét chỉ mục so với quét toàn bảng

- Quét toàn bảng:

Cơ sở dữ liệu sẽ đọc từng hàng trong bảng, điều này có thể rất chậm cho các tập dữ liệu lớn.

- Quét chỉ mục:

Cơ sở dữ liệu sử dụng một chỉ mục để nhanh chóng xác định các hàng liên quan, tránh việc quét toàn bộ bảng.

7. Giám sát và tối ưu hóa các chỉ mục

- Kế hoạch thực thi truy vấn:

Hầu hết các cơ sở dữ liệu cung cấp công cụ để hiển thị cách một truy vấn được thực thi (ví dụ, EXPLAIN trong MySQL). Điều này có thể giúp bạn hiểu liệu một chỉ mục có đang được sử dụng hay không.

- Bảo trì chỉ mục:

Chỉ mục có thể bị phân mảnh theo thời gian, điều này có thể làm suy giảm hiệu suất. Bảo trì định kỳ (như xây dựng lại hoặc tổ chức lại các chỉ mục) có thể giúp duy trì hiệu suất.

8. Các thực tiễn tốt nhất cho việc lập chỉ mục

- Bắt đầu với các khóa chính:

Luôn đảm bảo rằng các khóa chính được đánh chỉ mục.

- Chỉ mục các cột trong các điều khoản WHERE và JOIN:

Các cột thường được truy vấn, đặc biệt là những cột được sử dụng trong làm lọc (WHERE) và tham gia các bảng (JOIN), nên được lập chỉ mục.

- Tránh lập chỉ mục cho bảng nhỏ:

Các bảng nhỏ không có nhiều lợi ích từ việc lập chỉ mục vì chi phí có thể lớn hơn lợi ích.

- Cân nhắc về sự chọn lọc của cột:

Các cột có nhiều giá trị khác nhau (chọn lọc cao) sẽ hưởng lợi nhiều hơn từ các chỉ mục so với các cột có ít giá trị khác nhau (chọn lọc thấp).

9. Ví dụ về các chỉ mục trong các cơ sở dữ liệu khác nhau

Mỗi hệ thống cơ sở dữ liệu có cú pháp và tính năng hơi khác nhau để tạo và quản lý các chỉ mục:

- MySQL:

MySQL hỗ trợ nhiều loại chỉ mục, bao gồm chỉ mục FULLTEXT và SPATIAL cho dữ liệu địa lý.
CREATE FULLTEXT INDEX idx_content_fulltext ON Articles (content);

- PostgreSQL:

PostgreSQL hỗ trợ các loại chỉ mục nâng cao như GIN (Chỉ mục đảo ngược tổng quát) và GiST (Cây tìm kiếm tổng quát) cho tìm kiếm toàn văn và dữ liệu hình học.
CREATE INDEX idxgincontent ON Documents USING GIN (content);

- SQL Server:

SQL Server có các tính năng như Chỉ mục phân cụm (chứa dữ liệu thực tế trong chỉ mục) và Chỉ mục không phân cụm.
CREATE CLUSTERED INDEX idx_clustered_id ON Orders (order_id);

10. Trường hợp sử dụng thực tế

- Thương mại điện tử:

Lập chỉ mục tên sản phẩm, danh mục và giá để tìm kiếm và lọc nhanh.

- Mạng xã hội:

Lập chỉ mục hồ sơ người dùng theo email hoặc tên người dùng để chức năng đăng nhập và tìm kiếm.

- Hệ thống ngân hàng:

Lập chỉ mục các giao dịch của khách hàng theo số tài khoản hoặc ngày giao dịch để tăng tốc độ tạo báo cáo.

11. Ví dụ về cách tạo một chỉ mục trong SQL

Giả sử bạn có một bảng có tên Customers với các cột id, name, email và phone_number. Nếu bạn thường xuyên tìm kiếm khách hàng theo email của họ, bạn có thể tạo một chỉ mục trên cột email để tăng tốc độ tìm kiếm đó:
CREATE INDEX idx_email ON Customers (email);

Bây giờ, mọi truy vấn tìm kiếm theo email sẽ nhanh hơn:
SELECT * FROM Customers WHERE email = 'example@example.com';

- Xóa một chỉ mục:

Nếu bạn không còn cần một chỉ mục nữa, bạn có thể xóa nó bằng cách:
DROP INDEX idx_email;

12. Đề xuất sách

- Kỹ thuật tối ưu hóa cơ sở dữ liệu.

source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào