Postgres duy trì statistics về index ở trong view pg_stat_user_indexes
, trong đó idx_scan
là số lần index được sử dụng trong một câu query.
Trong nhiều trường hợp, bạn có thể giảm thiểu dung lượng của index bằng cách tạo index trên một phần các row của bảng.
-- Nếu chỉ quan tâm đến sản phẩm nào đã có giá, chúng ta có thể tạo index 1 phần như sau
CREATE INDEX products_price ON products (price) WHERE price IS NOT NULL;
Mình đã gặp trường hợp muốn drop 1 index nhưng không dám chắc có query nào sử dụng index này không. Thay vì drop index luôn thì bạn có thể set 1 flag đặc biệt để planner bỏ qua index này.
UPDATE pg_class SET indisvalid = FALSE WHERE indexrelid = 'index_name'::regclass;
Sau một thời gian không thấy ảnh hưởng gì thì có thể drop thôi. Flag này được Postgres sử dụng khi tạo index concurrently.