Indexing & Performance
Why Indexes Matter
-- Without index: Full table scan (slow on large tables)
SELECT * FROM orders WHERE user_id = 12345;
-- → MySQL scans every row
-- With index: B-tree lookup (fast)
CREATE INDEX idx_user_id ON orders(user_id);
-- → MySQL jumps directly to matching rowsIndex Types
-- Single column index
CREATE INDEX idx_email ON users(email);
-- Composite index (order matters!)
CREATE INDEX idx_user_date ON orders(user_id, created_at);
-- ✅ Efficient: WHERE user_id = 1 AND created_at > '2026-01-01'
-- ✅ Efficient: WHERE user_id = 1
-- ❌ Inefficient: WHERE created_at > '2026-01-01' (missing leading column)
-- Unique index
CREATE UNIQUE INDEX idx_unique_email ON users(email);
-- Partial index (PostgreSQL)
CREATE INDEX idx_active_users ON users(email) WHERE status = 'active';EXPLAIN — Analyze Query Performance
Common Performance Issues
Last updated
