Přeskočit na obsah
_CORE
AI & Agentic Systems Core Informační Systémy Cloud & Platform Engineering Data Platforma & Integrace Security & Compliance QA, Testing & Observability IoT, Automatizace & Robotika Mobile & Digital Banky & Finance Pojišťovnictví Veřejná správa Obrana & Bezpečnost Zdravotnictví Energetika & Utility Telco & Média Průmysl & Výroba Logistika & E-commerce Retail & Loyalty
Reference Technologie Blog Knowledge Base O nás Spolupráce Kariéra
Pojďme to probrat

SQL Optimalizace

01. 01. 2024 1 min čtení intermediate

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í.

sqldatabaseoptimalizacepostgresql