Přeskočit na obsah
_CORE
Know-How

SQL Optimalizace

8 min čtení
SQLDatabaseOptimalizacePostgreSQL

Pomalý SQL dotaz může zabít celou aplikaci. EXPLAIN ANALYZE je váš nejlepší přítel pro optimalizaci.

EXPLAIN ANALYZE

EXPLAIN ANALYZE SELECT u.name, COUNT(o.id) as order_count FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE u.created_at > '2024-01-01' GROUP BY u.name ORDER BY order_count DESC LIMIT 10; -- Seq Scan = špatně (full table scan) -- Index Scan = dobře -- Bitmap Index Scan = OK pro větší výsledky

Indexy

-- B-tree (default) — equality, range CREATE INDEX idx_users_email ON users(email); -- Composite index — pořadí sloupců matters! CREATE INDEX idx_orders_user_date ON orders(user_id, created_at DESC); -- Partial index — jen subset dat CREATE INDEX idx_active_users ON users(email) WHERE active = true; -- GIN index — JSONB, full-text CREATE INDEX idx_data ON products USING GIN(metadata);

Anti-patterns

  • SELECT * (načítá zbytečné sloupce)
  • N+1 problém (viz separátní článek)
  • LIKE '%term%' (nemůže použít index)
  • Funkce na indexovaném sloupci WHERE YEAR(created_at) = 2024
  • Chybějící LIMIT na velkých tabulkách

Klíčový takeaway

EXPLAIN ANALYZE vždy. Správné indexy, žádný SELECT *, composite indexy ve správném pořadí.

CORE SYSTEMS tým

Praktické know-how z reálných projektů. Bez buzzwordů, s kódem.