Postat acum 1 zi
sql
-- DA — coloane folosite în WHERE cu multă cardinalitate
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_posts_author_created ON posts(author_id, created_at DESC);
-- NU — coloane boolean sau cu puține valori distincte (folosește partial index)
CREATE INDEX idx_posts_published ON posts(published) WHERE published = true;
-- Rapid lookup pentru text search
CREATE INDEX idx_posts_title_trgm ON posts USING GIN (title gin_trgm_ops);Check list simplu
Pune index dacă:
- Folosești coloana în
WHERE,JOIN ON,ORDER BY - Tabelul are peste ~10.000 de rânduri
- Coloana are multe valori distincte (high cardinality)
NU pune index dacă:
- Tabelul e mic (<1.000 rânduri — seq scan e la fel de rapid)
- Coloana e boolean sau enum cu 2-3 valori (folosește
partial index) - Faci mai multe INSERT-uri decât SELECT-uri
Verificare
EXPLAIN ANALYZE SELECT * FROM posts WHERE author_id = $1;
Dacă vezi Seq Scan pe un tabel mare → lipsește un index. Dacă vezi Index Scan → e ok.