Back to Blog
2025-05-25Abyan Dimas

Database Performance: Indexing Strategies in PostgreSQL

Database Server

Your app is fast in development with 10 users. In production with 100,000 users, it crawls. The culprit is usually missing indexes.

The Library Analogy

Imagine a library with 1 million books.

  • Without Index: To find "Harry Potter", you check every single book on every shelf. (Full Table Scan).
  • With Index: You go to the catalog card, find "H", then "Harry Potter", and get the exact shelf number. (Index Scan).

Creating an Index

CREATE INDEX idx_users_email ON users(email);

Now, searching by email is O(log n) instead of O(n).

Composite Indexes

If you often query by two columns:

SELECT * FROM users WHERE last_name = 'Doe' AND first_name = 'John';

You need a multi-column index:

CREATE INDEX idx_users_names ON users(last_name, first_name);

Order matters! This index helps search by last_name alone, but NOT by first_name alone.

EXPLAIN ANALYZE

Don't guess. Ask Postgres.

EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com';

It will tell you exactly how it planned to execute the query and how long it took.

Share this article

Read Next