PostgreSQL Indexes
Creating and managing indexes
B-tree Index
CREATE INDEX idx_email ON users(email); # default B-tree index
CREATE INDEX idx_name ON users USING BTREE(name); # explicit B-tree
Unique Index
CREATE UNIQUE INDEX idx_username ON users(username); # unique constraint
Composite Index
CREATE INDEX idx_name_age ON users(last_name, first_name); # multi-column index
Partial Index
CREATE INDEX idx_active_users ON users(email)
WHERE active = true; # index subset of rows
Expression Index
CREATE INDEX idx_lower_email ON users(LOWER(email)); # index on expression
GIN Index
CREATE INDEX idx_tags ON articles USING GIN(tags); # for arrays, JSONB
GiST Index
CREATE INDEX idx_location ON places USING GIST(location); # for geometric data
Manage Indexes
\di # list indexes
DROP INDEX idx_email; # drop index
REINDEX INDEX idx_email; # rebuild index
REINDEX TABLE users; # rebuild all table indexes