Know-How
Database Indexing Strategie
Správný index zrychlí dotaz 1000x. Špatný index zabírá místo a zpomaluje zápisy.
Typy indexů
- B-tree: Default, equality a range queries
- Hash: Jen equality (=)
- GIN: JSONB, array, full-text search
- GiST: Geometrie, range types
- BRIN: Velké tabulky s přirozeným řazením
Strategie
-- Composite index — pořadí sloupců!
-- Pravidlo: equality columns first, then range
CREATE INDEX idx_orders ON orders(status, created_at DESC);
-- Covering index — index-only scan
CREATE INDEX idx_users_cover ON users(email) INCLUDE (name, role);
-- Partial index — jen aktivní záznamy
CREATE INDEX idx_active ON users(email) WHERE deleted_at IS NULL;
-- Analýza nepoužívaných indexů
SELECT indexrelname, idx_scan FROM pg_stat_user_indexes
WHERE idx_scan = 0 AND indexrelname NOT LIKE '%_pkey';
Klíčový takeaway
Equality first v composite indexu. Partial pro subset, covering pro index-only scan. Odstraňte nepoužívané indexy.