Modul 12 · Databáze srozumitelně

Dotazy a rychlost

Proč je aplikace se sto záznamy svižná a s deseti tisíci pomalá. Dvě příčiny, které za to můžou skoro vždycky.

12 minlekce 71/107

Po lekci umíš

  • Rozumíš tomu, co je dotaz a co ho zpomaluje
  • Znáš dva nejčastější důvody pomalé aplikace
  • Umíš zadat kontrolu výkonu dřív, než se projeví
Obsah lekce (5)

Aplikace, kterou testuješ na dvaceti záznamech, je rychlá vždycky. Problém se objeví, až když má reálná data – a tehdy už na ní někdo závisí.

Dobrá zpráva: příčiny jsou skoro vždycky dvě a obě se dají zkontrolovat dopředu.

Co je dotaz

Otázka položená databázi. „Dej mi rezervace zákazníka číslo 1 od dnešního data, seřazené podle času.“

Claude ho napíše za tebe. Ty potřebuješ vědět, kdy je dotaz problém.

Příčina 1: Databáze musí projít všechno

Když se ptáš na rezervace zákazníka a databáze nemá rejstřík, přečte celou tabulku a vybere ty správné. U tisíce řádků je to bleskové. U milionu ne.

Rejstřík se vyplatí na sloupcích, podle kterých se filtruje nebo řadí: cizí klíče, datum, stav, e-mail.

Příčina 2: Dotazů je moc

Zákeřnější a mnohem častější. Aplikace nenačte data jedním dotazem, ale jedním na seznam a pak dalším na každou položku.

Špatně: 1 + N dotazů

  • Načti 50 rezervací → 1 dotaz.
  • Pro každou načti zákazníka → 50 dotazů.
  • Celkem 51 dotazů.
  • Se 500 rezervacemi 501 dotazů a stránka se načítá vteřiny.

Dobře: 1 dotaz

  • Načti 50 rezervací i se zákazníky → 1 dotaz.
  • Stejný výsledek.
  • Rychlost se nezmění ani při 500 položkách.

Tenhle vzor má i jméno – problém N+1 – a je zdaleka nejčastější příčinou pomalé aplikace.

Prompt pro Claude Code

Zkontroluj výkon dotazů

Než aplikace dostane skutečná data.

Projdi místa v aplikaci, kde se načítají data, a zkontroluj výkon.

Hledej:
1. Místa, kde se v cyklu dělá dotaz na každou položku (problém N+1).
2. Dotazy bez omezení počtu – načte se celá tabulka.
3. Sloupce, podle kterých se filtruje nebo řadí a nemají rejstřík.
4. Načítání sloupců, které se vůbec nepoužijí.

U každého nálezu napiš:
- kde to je,
- jak se to projeví při 10 000 záznamech,
- jak to opravit.

Nic zatím neměň.

Stránkování

Třetí věc, na kterou se zapomíná: seznam bez omezení počtu.

Když má obrazovka „všechny objednávky“ načíst všechny objednávky, jednou jich bude třicet tisíc. Prohlížeč to neunese.

  1. Načítej po stránkách

    Padesát položek na stránku. Uživatel stejně víc nepřečte.

  2. Nebo načítej postupně

    Další položky se dotáhnou při rolování.

  3. Vždycky nastav strop

    I když čekáš málo dat. Strop je pojistka proti situaci, kterou jsi nečekal.

Kdy to řešit

Ne hned. Ale ani ne až to shoří.

  1. Při stavbě

    Rejstříky na cizí klíče a stránkování u seznamů. To je pár minut a ušetří pozdější přestavbu.

  2. Před spuštěním naostro

    Nech si projít výkon dotazů kontrolním promptem výše.

  3. Když je to pomalé

    Měř, nehádej. Zjisti, který dotaz trvá dlouho, a řeš ten.

Prompt pro Claude Code

Proč je tahle stránka pomalá

Když už je něco konkrétně pomalé.

Stránka [ADRESA] se načítá pomalu – trvá to zhruba [ČAS].

Zjisti proč:
1. Kolik dotazů se při načtení pošle a jaké.
2. Který z nich trvá nejdéle.
3. Kolik dat se přenáší.

Až budeš vědět, kde je problém, navrhni řešení a napiš mi,
o kolik by to mělo pomoct.

Neoptimalizuj nic, dokud nevíme, kde to vázne.
Pro zvídavé

Databáze umí ukázat, jak dotaz plánuje provést – jestli použije rejstřík, nebo projde celou tabulku. Nemusíš tomu rozumět; stačí říct „ukaž mi plán tohohle dotazu a vysvětli mi ho česky“.

Je to nejrychlejší způsob, jak potvrdit, že přidaný rejstřík skutečně pomohl.

Cvičení20 minut

Nech si vygenerovat do své databáze pár tisíc testovacích záznamů a otevři hlavní seznam.

Když je to pomalé, spusť diagnostický prompt. Když je to rychlé, spusť kontrolní prompt na výkon – zjistíš, jestli to vydrží i při desetinásobku.

Co si odnést

  • Dvě hlavní příčiny pomalosti: chybějící rejstřík a příliš mnoho dotazů (N+1).
  • Rejstříky patří na sloupce, podle kterých se filtruje a řadí.
  • Každý seznam potřebuje strop na počet položek, i když čekáš málo dat.
  • Optimalizuj až po měření. Bez měření zrychluješ náhodně.

Máš to za sebou?

Označ lekci jako hotovou, ať víš, kde jsi skončil. Nic se tím neuzamkne.

Obsah aktualizován: 21. srpna 2026