Přeskočit na obsah
_CORE
AI & agentní systémy Podnikové informační systémy Cloud & Platform Engineering Datová platforma & integrace Bezpečnost & compliance QA, testování & observabilita IoT, automatizace & robotika Mobilní & digitální produkty Bankovnictví & finance Pojišťovnictví Veřejná správa Obrana & bezpečnost Zdravotnictví Energetika & utility Telco & média Průmysl & výroba Logistika & e-commerce Retail & věrnostní programy
Reference Technologie Blog Know-how Nástroje
O nás Spolupráce Kariéra
CS EN DE
Pojďme to probrat

SQL Optimalizace

21. 12. 2023 Aktualizováno: 24. 03. 2026 1 min čtení intermediate
Tento článek byl publikován v roce 2023. Některé informace mohou být zastaralé.

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
Sdílet:

CORE SYSTEMS tým

Stavíme core systémy a AI agenty, které drží provoz. 15 let zkušeností s enterprise IT.