<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.rettungsdienstblog.eu/index.php?action=history&amp;feed=atom&amp;title=Jak_zrychlit_datab%C3%A1zov%C3%A9_dotazy_v_SQL</id>
	<title>Jak zrychlit databázové dotazy v SQL - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.rettungsdienstblog.eu/index.php?action=history&amp;feed=atom&amp;title=Jak_zrychlit_datab%C3%A1zov%C3%A9_dotazy_v_SQL"/>
	<link rel="alternate" type="text/html" href="https://wiki.rettungsdienstblog.eu/index.php?title=Jak_zrychlit_datab%C3%A1zov%C3%A9_dotazy_v_SQL&amp;action=history"/>
	<updated>2026-09-26T20:00:42Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Rettungsdienst-Wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.rettungsdienstblog.eu/index.php?title=Jak_zrychlit_datab%C3%A1zov%C3%A9_dotazy_v_SQL&amp;diff=166555&amp;oldid=prev</id>
		<title>MamieFoutch050 am 21. August 2026 um 18:42 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.rettungsdienstblog.eu/index.php?title=Jak_zrychlit_datab%C3%A1zov%C3%A9_dotazy_v_SQL&amp;diff=166555&amp;oldid=prev"/>
		<updated>2026-08-21T18:42:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 21. August 2026, 18:42 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Na závěr si zkuste přečíst svou zprávu očima někoho, kdo projekt nezná. Pokud by mu dávala smysl &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;věděl by, proč byla změna provedena, máte vyhráno. A pokud si nejste jistí, podívejte &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;na historii svých posledních commitů – často uvidíte, co &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;třeba zlepšit&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Psaní kvalitních zpráv je dovednost&lt;/del&gt;, která &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;se dá trénovat&lt;/del&gt;, a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;odměnou je vám přehledná historie, která šetří čas při každé spolupráci&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Praktickým tipem &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;také použití whitelistů pro vstupy&lt;/del&gt;, které &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mají omezený rozsah hodnot, jako jsou čísla stavů&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;identifikátory &lt;/del&gt;nebo &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;výčtové typy&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pro textové vstupy&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kde potřebujete zachovat formátování, použijte vrstvu pro escapování výstupu, nikoliv pro vstup&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pamatujte&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že SQL injection se nevyhýbá ani JSON API, GraphQL dotazům nebo noSQL databázím, i když tam jsou principy trochu odlišné. Vždy proto testujte své aplikace nástroji pro dynamickou analýzu zranitelností &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pravidelně provádějte penetrační testy&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;SQL injection patří mezi nejzávažnější a zároveň nejčastější zranitelnosti webových aplikací&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Útočník do vstupních polí&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;URL parametrů či hlaviček vloží &lt;/del&gt;SQL &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;příkazy&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které se pak neoprávněně provedou nad databází&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Důsledkem může být únik citlivých dat, &lt;/del&gt;jejich &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;smazání nebo dokonce převzetí kontroly nad serverem&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Obrana není složitá&lt;/del&gt;, ale &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vyžaduje důslednost a pochopení principu&lt;/del&gt;, na &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kterém útok funguje&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Druhý častý problém &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ignorování dotazovacích vzorů&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;NoSQL databáze nejsou univerzální – každý typ má specifické možnosti dotazování&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Než nasadíte&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zkuste si napsat pět nejčastějších dotazů&lt;/del&gt;, které &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vaše aplikace bude spouštět&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokud zjistíte&lt;/del&gt;, že &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;potřebujete fulltextové vyhledávání nebo složité agregace&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;možná &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;lepší zůstat u relační databáze nebo zkombinovat obojí (tzv. polyglot persistence). Také si rozmyslete, jak budete data mazat – některé NoSQL databáze nemají efektivní operaci pro smazání velkého rozsahu dat&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Na závěr&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;: TypeScript &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nejlépe učí při práci na reálném projektu&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Začněte tím&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že si &lt;/del&gt;do &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;existujícího JavaScriptového projektu přidáte konfigurační soubor a postupně přepnete soubory na &lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ts. Sledujte chyby, které editor hlásí&lt;/del&gt;, a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;opravujte je&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Po pár týdnech zjistíte, že píšete kód rychleji, protože &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nemusíte spoléhat na paměť &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dokumentaci. Chyby odhalíte dřív, než se dostanou &lt;/del&gt;k &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;uživatelům, a to je největší přínos, který TypeScript nabízí&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokud se pro NoSQL rozhodnete, začněte s menším projektem&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nepřevádějte hned celý systém. Vytvořte si vzorovou aplikaci s reálnými daty a otestujte výkon&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;škálování &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;operace jako backup &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;obnova&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Sledujte, jak se databáze chová při zátěži&lt;/del&gt;, a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;hlavně si nastavte monitorování&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;NoSQL není samospasitelný &lt;/del&gt;– &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pokud vám chybí zkušenosti&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;může se snadno stát&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že místo zjednodušení dostanete složitější infrastrukturu&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Začněte s jasným cílem, měřte výsledky &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;teprve poté rozšiřujte&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Při práci s funkcemi si osvojte volitelné parametry (znak ?) &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;výchozí hodnoty. Volitelné parametry umožňují zavolat funkci bez daného argumentu&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale uvnitř musíte kontrolovat, zda je hodnota definovaná&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Výchozí hodnoty vám ušetří ruční přiřazování undefined&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dávejte si také &lt;/del&gt;pozor na &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;typy&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které se mění v průběhu času – použijte generické typy&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pokud chcete, aby funkce fungovala s libovolným typem při zachování typové bezpečnosti&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Například funkce pro zpracování pole by měla být generická&lt;/del&gt;, abyste &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nepřišli o informaci o typu prvků&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Typické chyby při zavádění NoSQL Nejčastější chybou je přenést relační model do NoSQL beze změny. Pokud začnete modelovat dokumenty s odkazami &lt;/del&gt;jako &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cizí klíče &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pak je spojujete ručně&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ztrácíte výhodu rychlosti&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Místo toho denormalizujte – ukládejte data tak&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jak je čtete&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Například &lt;/del&gt;u &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;uživatele si rovnou uložte i jeho poslední objednávky&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;abyste nemuseli dělat druhé dotazy&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pozor ale na konzistenci při aktualizacích – musíte pravidelně synchronizovat duplicitní data&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jinak &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vám rozsype konzistence.&lt;/del&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Jednou z častých pastí je používání OR &lt;/del&gt;v &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;podmínkách&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které znesnadňuje optimalizátoru volbu indexu&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokud je to možné&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nahraďte OR pomocí UNION ALL &lt;/del&gt;na &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dvě samostatné podmínky. Podobně &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vyhněte používání NOT IN&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které bývá pomalejší než NOT EXISTS. Důležité je také sledovat statistiky tabulek – pokud se často mění data&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;spouštějte pravidelně aktualizaci statistik, aby optimalizátor měl přesné informace o rozložení hodnot. V neposlední řadě se vyplatí pečlivě testovat dotazy &lt;/del&gt;na &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;reálných datech, ne na malé testovací sadě&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Při optimalizaci SQL dotazů se vyplatí začít u vysvětlovacího plánu. Většina databázových systémů nabízí příkaz EXPLAIN, který ukáže, jak se dotaz vykonává. Sledujte sekvenční skeny tabulek, které jsou nejčastější příčinou pomalých dotazů. Pokud vidíte velké množství čtených řádků a malý výsledek, je na místě zvážit indexy. Správně zvolený index dokáže zkrátit dobu vykonání i o několik řádů, ale pozor na jejich nadměrné používání, které zpomaluje zápisy.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nejčastější chyby v dotazech &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jak &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jim vyhnout Klasickým prohřeškem &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;používání SELECT * místo vypsání konkrétních sloupců&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nezbytečně to přenáší data&lt;/ins&gt;, která &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nepotřebujete&lt;/ins&gt;, a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zvyšuje zátěž sítě i paměti&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Další častou chybou &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;řazení a filtrování na sloupcích&lt;/ins&gt;, které &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nejsou indexované&lt;/ins&gt;, nebo &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;používání funkcí v ORDER BY&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Zkuste také omezit počet vnořených poddotazů a nahradit je JOINem&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pokud to jde&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Při psaní JOINů dbejte na to&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;abyste spojovali tabulky na indexovaných sloupcích &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;měli jasně definované typy spojení&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Významný vliv na výkon má také práce s daty na aplikační úrovni&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokud potřebujete agregace, jako jsou součty nebo průměry&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nechte je spočítat &lt;/ins&gt;SQL, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;a ne v programovacím jazyce&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Místo načítání všech záznamů a &lt;/ins&gt;jejich &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;filtrování v paměti aplikace vždy filtrujte v dotazu&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pomůže také stránkování výsledků – používejte LIMIT a OFFSET&lt;/ins&gt;, ale &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mějte na paměti, že velký OFFSET je neefektivní. Pro listování velkými datovými sadami zvažte tzv. keyset pagination&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;která je založena &lt;/ins&gt;na &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;podmínce větší než poslední ID&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Časté chyby, které vás připraví o smysl testů První typická chyba &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;testování implementace místo chování&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Když testujete, že funkce volá jinou funkci s určitými argumenty, svazujete si ruce pro budoucí refaktoring&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Test by měl selhat pouze tehdy, když se změní výsledek&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ne když se změní vnitřní struktura kódu. Druhá častá chyba je psaní testů&lt;/ins&gt;, které &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;projdou i bez testované funkce&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Typicky jde o testy, které kontrolují jen to&lt;/ins&gt;, že &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;funkce nevyhodí výjimku&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale nekontrolují návratovou hodnotu. Takový test &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;k ničemu&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Na závěr &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;– efektivní použití Reduxu vyžaduje nejen znalost API, ale i disciplínu. Pravidelně kontrolujte, zda &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ve store nehromadí nepotřebná data&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokud některý stav nepoužívá více komponent&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zvažte jeho přesun &lt;/ins&gt;do &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;lokálního stavu&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;A pamatujte&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že Redux není výkonnostní nástroj – je to nástroj pro předvídatelnost &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;debuggování&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;S Redux Toolkit a správnými návyky &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;psaní React aplikací stane přehlednější &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;méně náchylné &lt;/ins&gt;k &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;chybám&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Začněte u reducerů&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Reducer je funkce&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;která přijímá stav &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;akci &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vrací nový stav&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Testování spočívá v tom&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že zavoláte reducer s konkrétním stavem a akcí &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;porovnáte výsledek s očekávaným&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Důležité je neměnit původní stav &lt;/ins&gt;– &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;reducer musí být čistý. Při psaní testů vždy vytvořte nový objekt stavu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;abyste předešli vedlejším efektům. Typická chyba je testovat reducer přes celý store&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;což zbytečně komplikuje izolaci&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Místo toho importujte reducer přímo &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;testujte ho jako samostatnou jednotku&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Jak na efektivní code review &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;bezpečné slučování Než začnete slučovat&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;proveďte rebase na aktuální verzi hlavní větve&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Tím se vyhnete konfliktům v pozdější fázi a historie zůstane lineární&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Při rebase ale &lt;/ins&gt;pozor&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;: pokud &lt;/ins&gt;na &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;větvi pracuje více lidí&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;preferujte merge&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;protože rebase přepisuje historii a může ostatním zkomplikovat práci&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Vždy po rebase spusťte testy&lt;/ins&gt;, abyste &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;odhalili případné rozbité závislosti&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Psaní prvního unit testu vypadá &lt;/ins&gt;jako &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jednoduchý úkol, ale často skončí u frustrace &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;testů&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;které nic netestují&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nejde o to napsat co nejvíce kódu, ale pochopit&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;co chcete ověřit&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Začněte &lt;/ins&gt;u &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nejmenší funkce, která něco vrací a nemá vedlejší efekty. Ideální je čistá funkce&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;která ze stejného vstupu vždy vrátí stejný výstup&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Než začnete psát test&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;položte si otázku: Co přesně má tato funkce dělat a co by &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;stalo, kdyby to nedělala?&lt;/ins&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Testování mobilních aplikací se liší od testování webů hned &lt;/ins&gt;v &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;několika zásadních ohledech. Přenosná zařízení mají omezený výkon, různou velikost displeje&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jiný způsob ovládání a pracují s daty i senzory&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Než začnete psát první testovací případy&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zkuste si odpovědět &lt;/ins&gt;na &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tři otázky: Kdo bude aplikaci používat? Jaké zařízení a verzi systému nejčastěji uvidíte? Co &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;stane&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;když uživatel ztratí připojení k internetu? Odpovědi vám pomohou nastavit priority&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;protože otestovat všechno &lt;/ins&gt;na &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;všech zařízeních není reálně možné&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Indexy nejsou všelék a často narazíte na problém, že dotaz index nepoužije. Důvodem bývá použití funkce na sloupci v podmínce WHERE, typová konverze nebo nevhodný formát porovnání. Například dotaz WHERE DATEPART(year, created_at) = 2024 znemožní použití indexu, zatímco podmínka WHERE created_at &amp;gt;= &amp;#039;2024-01-01&amp;#039; AND created_at &lt;/ins&gt;Při optimalizaci SQL dotazů se vyplatí začít u vysvětlovacího plánu. Většina databázových systémů nabízí příkaz EXPLAIN, který ukáže, jak se dotaz vykonává. Sledujte sekvenční skeny tabulek, které jsou nejčastější příčinou pomalých dotazů. Pokud vidíte velké množství čtených řádků a malý výsledek, je na místě zvážit indexy. Správně zvolený index dokáže zkrátit dobu vykonání i o několik řádů, ale pozor na jejich nadměrné používání, které zpomaluje zápisy.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MamieFoutch050</name></author>
	</entry>
	<entry>
		<id>https://wiki.rettungsdienstblog.eu/index.php?title=Jak_zrychlit_datab%C3%A1zov%C3%A9_dotazy_v_SQL&amp;diff=165999&amp;oldid=prev</id>
		<title>Jay88I76471404: Die Seite wurde neu angelegt: „Na závěr si zkuste přečíst svou zprávu očima někoho, kdo projekt nezná. Pokud by mu dávala smysl a věděl by, proč byla změna provedena, máte vyhráno. A pokud si nejste jistí, podívejte se na historii svých posledních commitů – často uvidíte, co je třeba zlepšit. Psaní kvalitních zpráv je dovednost, která se dá trénovat, a odměnou je vám přehledná historie, která šetří čas při každé spolupráci.&lt;br&gt;&lt;br&gt;Praktick…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.rettungsdienstblog.eu/index.php?title=Jak_zrychlit_datab%C3%A1zov%C3%A9_dotazy_v_SQL&amp;diff=165999&amp;oldid=prev"/>
		<updated>2026-08-21T18:00:38Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „Na závěr si zkuste přečíst svou zprávu očima někoho, kdo projekt nezná. Pokud by mu dávala smysl a věděl by, proč byla změna provedena, máte vyhráno. A pokud si nejste jistí, podívejte se na historii svých posledních commitů – často uvidíte, co je třeba zlepšit. Psaní kvalitních zpráv je dovednost, která se dá trénovat, a odměnou je vám přehledná historie, která šetří čas při každé spolupráci.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Praktick…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Na závěr si zkuste přečíst svou zprávu očima někoho, kdo projekt nezná. Pokud by mu dávala smysl a věděl by, proč byla změna provedena, máte vyhráno. A pokud si nejste jistí, podívejte se na historii svých posledních commitů – často uvidíte, co je třeba zlepšit. Psaní kvalitních zpráv je dovednost, která se dá trénovat, a odměnou je vám přehledná historie, která šetří čas při každé spolupráci.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Praktickým tipem je také použití whitelistů pro vstupy, které mají omezený rozsah hodnot, jako jsou čísla stavů, identifikátory nebo výčtové typy. Pro textové vstupy, kde potřebujete zachovat formátování, použijte vrstvu pro escapování výstupu, nikoliv pro vstup. Pamatujte, že SQL injection se nevyhýbá ani JSON API, GraphQL dotazům nebo noSQL databázím, i když tam jsou principy trochu odlišné. Vždy proto testujte své aplikace nástroji pro dynamickou analýzu zranitelností a pravidelně provádějte penetrační testy.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;SQL injection patří mezi nejzávažnější a zároveň nejčastější zranitelnosti webových aplikací. Útočník do vstupních polí, URL parametrů či hlaviček vloží SQL příkazy, které se pak neoprávněně provedou nad databází. Důsledkem může být únik citlivých dat, jejich smazání nebo dokonce převzetí kontroly nad serverem. Obrana není složitá, ale vyžaduje důslednost a pochopení principu, na kterém útok funguje.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Druhý častý problém je ignorování dotazovacích vzorů. NoSQL databáze nejsou univerzální – každý typ má specifické možnosti dotazování. Než nasadíte, zkuste si napsat pět nejčastějších dotazů, které vaše aplikace bude spouštět. Pokud zjistíte, že potřebujete fulltextové vyhledávání nebo složité agregace, možná je lepší zůstat u relační databáze nebo zkombinovat obojí (tzv. polyglot persistence). Také si rozmyslete, jak budete data mazat – některé NoSQL databáze nemají efektivní operaci pro smazání velkého rozsahu dat.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Na závěr: TypeScript se nejlépe učí při práci na reálném projektu. Začněte tím, že si do existujícího JavaScriptového projektu přidáte konfigurační soubor a postupně přepnete soubory na .ts. Sledujte chyby, které editor hlásí, a opravujte je. Po pár týdnech zjistíte, že píšete kód rychleji, protože se nemusíte spoléhat na paměť a dokumentaci. Chyby odhalíte dřív, než se dostanou k uživatelům, a to je největší přínos, který TypeScript nabízí.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Pokud se pro NoSQL rozhodnete, začněte s menším projektem. Nepřevádějte hned celý systém. Vytvořte si vzorovou aplikaci s reálnými daty a otestujte výkon, škálování a operace jako backup a obnova. Sledujte, jak se databáze chová při zátěži, a hlavně si nastavte monitorování. NoSQL není samospasitelný – pokud vám chybí zkušenosti, může se snadno stát, že místo zjednodušení dostanete složitější infrastrukturu. Začněte s jasným cílem, měřte výsledky a teprve poté rozšiřujte.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Při práci s funkcemi si osvojte volitelné parametry (znak ?) a výchozí hodnoty. Volitelné parametry umožňují zavolat funkci bez daného argumentu, ale uvnitř musíte kontrolovat, zda je hodnota definovaná. Výchozí hodnoty vám ušetří ruční přiřazování undefined. Dávejte si také pozor na typy, které se mění v průběhu času – použijte generické typy, pokud chcete, aby funkce fungovala s libovolným typem při zachování typové bezpečnosti. Například funkce pro zpracování pole by měla být generická, abyste nepřišli o informaci o typu prvků.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Typické chyby při zavádění NoSQL Nejčastější chybou je přenést relační model do NoSQL beze změny. Pokud začnete modelovat dokumenty s odkazami jako cizí klíče a pak je spojujete ručně, ztrácíte výhodu rychlosti. Místo toho denormalizujte – ukládejte data tak, jak je čtete. Například u uživatele si rovnou uložte i jeho poslední objednávky, abyste nemuseli dělat druhé dotazy. Pozor ale na konzistenci při aktualizacích – musíte pravidelně synchronizovat duplicitní data, jinak se vám rozsype konzistence.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Jednou z častých pastí je používání OR v podmínkách, které znesnadňuje optimalizátoru volbu indexu. Pokud je to možné, nahraďte OR pomocí UNION ALL na dvě samostatné podmínky. Podobně se vyhněte používání NOT IN, které bývá pomalejší než NOT EXISTS. Důležité je také sledovat statistiky tabulek – pokud se často mění data, spouštějte pravidelně aktualizaci statistik, aby optimalizátor měl přesné informace o rozložení hodnot. V neposlední řadě se vyplatí pečlivě testovat dotazy na reálných datech, ne na malé testovací sadě.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Při optimalizaci SQL dotazů se vyplatí začít u vysvětlovacího plánu. Většina databázových systémů nabízí příkaz EXPLAIN, který ukáže, jak se dotaz vykonává. Sledujte sekvenční skeny tabulek, které jsou nejčastější příčinou pomalých dotazů. Pokud vidíte velké množství čtených řádků a malý výsledek, je na místě zvážit indexy. Správně zvolený index dokáže zkrátit dobu vykonání i o několik řádů, ale pozor na jejich nadměrné používání, které zpomaluje zápisy.&lt;/div&gt;</summary>
		<author><name>Jay88I76471404</name></author>
	</entry>
</feed>