Trong PostgreSQL, chỉ mục (index) là một công cụ quan trọng giúp cải thiện hiệu suất của các truy vấn. Có hai loại chỉ mục chính là clustered indexnon-clustered index. Dưới đây là sự khác biệt giữa chúng:

1. Clustered Index

  • Định Nghĩa: Một clustered index xác định thứ tự vật lý của các bản ghi trong bảng. Mỗi bảng chỉ có thể có một clustered index vì các bản ghi chỉ có thể được sắp xếp theo một cách duy nhất.
  • Cách Hoạt Động: Khi bạn tạo một clustered index trên một cột, PostgreSQL sẽ sắp xếp các bản ghi trong bảng theo giá trị của cột đó. Điều này làm cho việc tìm kiếm các giá trị gần nhau trở nên nhanh chóng hơn.
  • Sử Dụng Tốt Nhất: Clustered index thường được sử dụng cho các cột mà thường xuyên được sử dụng để tìm kiếm, sắp xếp hoặc tham gia (join).
  • Ví Dụ: Nếu bạn có một bảng lưu trữ thông tin người dùng và bạn muốn thường xuyên truy vấn theo ID người dùng, bạn có thể tạo một clustered index trên cột ID.
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

2. Non-Clustered Index

  • Định Nghĩa: Một non-clustered index là một chỉ mục mà không ảnh hưởng đến thứ tự vật lý của các bản ghi trong bảng. Nó tạo ra một cấu trúc dữ liệu riêng biệt, tham chiếu đến vị trí của các bản ghi trong bảng.
  • Cách Hoạt Động: Khi bạn tạo một non-clustered index, PostgreSQL sẽ tạo ra một cấu trúc chỉ mục chứa các giá trị được chỉ mục và một con trỏ đến các bản ghi trong bảng. Điều này cho phép tìm kiếm nhanh chóng nhưng không sắp xếp lại các bản ghi trong bảng.
  • Sử Dụng Tốt Nhất: Non-clustered index phù hợp cho các cột mà bạn thường xuyên tìm kiếm nhưng không cần thiết phải sắp xếp theo thứ tự vật lý trong bảng.
  • Ví Dụ: Nếu bạn thường xuyên tìm kiếm người dùng theo email, bạn có thể tạo một non-clustered index trên cột email.
CREATE INDEX idx_email ON users(email);

Tóm Tắt Sự Khác Biệt

Đặc ĐiểmClustered IndexNon-Clustered Index
Thứ Tự Vật LýThay đổi thứ tự vật lý của bản ghiKhông thay đổi thứ tự vật lý
Số LượngChỉ có một (mỗi bảng chỉ có một)Có thể có nhiều (nhiều chỉ mục)
Tìm KiếmNhanh cho các truy vấn sắp xếpNhanh cho các tìm kiếm, tham gia
Hiệu Suất GhiChậm hơn khi ghi dữ liệu do sắp xếpThường nhanh hơn khi ghi dữ liệu

Kết Luận

Sự khác biệt giữa clustered và non-clustered index trong PostgreSQL chủ yếu nằm ở cách thức tổ chức và sử dụng dữ liệu. Việc lựa chọn loại chỉ mục phù hợp cho từng tình huống sẽ giúp tối ưu hóa hiệu suất truy vấn và ghi trong cơ sở dữ liệu của bạn.