Bình thường DB dùng index để tìm vị trí hàng, rồi quay lại bảng (heap fetch) để lấy các cột còn lại. Nếu index đã chứa tất cả cột mà truy vấn cần (cả trong SELECT, WHERE, ORDER BY) thì DB đọc luôn từ index, bỏ qua bước truy cập bảng → gọi là index-only scan, và index đó là covering index cho truy vấn.
- PostgreSQL hỗ trợ mệnh đề
INCLUDE:CREATE INDEX ... ON t (a) INCLUDE (b)— b nằm ở leaf để "cover" nhưng không tham gia sắp xếp/tìm. - Lợi: bớt I/O đọc bảng, nhanh hơn rõ với truy vấn nóng.
- Lưu ý PostgreSQL: index-only scan cần visibility map đủ mới (VACUUM giúp), nếu không vẫn phải kiểm tra visibility ở heap.
Đánh đổi: index rộng hơn → tốn dung lượng và ghi chậm hơn.