MiddleDatabase

Index trong database là gì? Có nên đánh index cho mọi cột không?

Index là một cấu trúc dữ liệu phụ (thường là B-tree) giúp tìm hàng theo giá trị một cột mà không phải quét toàn bảng, giống mục lục của một cuốn sách.

Không nên đánh index mọi cột vì:

  • Mỗi lần INSERT, UPDATE, DELETE đều phải cập nhật thêm index, ghi chậm hơn.
  • Index tốn dung lượng.
  • Cột ít giá trị khác nhau (như status chỉ có 2 giá trị) thường không được lợi nhiều.
Đánh index cho truy vấn thật sự hay chạy
create index posts_published_at_idx on posts (published_at desc)
  where status = 'published';

Câu trả lời tốt sẽ nhắc tới việc đo trước bằng EXPLAIN ANALYZE rồi mới thêm index cho đúng truy vấn chậm.