Diskuze: Pomoct s řešením
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.


Dotaz pro zjištění řádku s nejvyšším ID uděláš tak, že si sestupně seřadíš záznamy podle ID a vybereš první z nich.
SELECT id, item_id, supplier_id, price, vat, quantity FROM store ORDER BY id DESC LIMIT 1;
Prováděcí plán pro jakoukoli SQL query v postgresu vypíšeš tak, že
před ten dotaz dáš EXPLAIN (všimni si ale, že
EXPLAIN SELECT * FROM store; ti jaksi vypíše plán úplně jiné
query, než chceš
). Příkaz
EXPLAIN ukáže, jestli databázový systém použil pro vyhledávání index
(Index Scan), nebo prochází přímo tabulku (Seq Scan), odhadovaný čas
(cost), počet řádek, které prošel (rows) atd.
Tohle ukáže pro každý krok query (např. seřazení, podmínka apod.) V
postgresu můžeš použít taky ještě EXPLAIN ANALYZE. ANALYZE
vykoná na pozadí samotný dotaz a vrátí k odhadovanému času také čas,
jak dlouho se dotaz skutečně zpracovával. Všimni si, že bez klíčového
slova ANALYZE neukáže skutečný čas, protože databáze tu
query vlastně nevykonala, ale pro odhadovanou cenu dotazu to není potřeba.
Odhadovaná cena bude položka cost, odhadovaná velikost odpovědi
pak rows.
Děkuji!
Formulovat dotaz, který načte názvy dodavatele, množství a cenu za položku s názvem "kufr", které máme skladem a jeho cena je nejméně 250 a až 10 ks k dispozici
SELECT * FROM STORE S JOIN ITEM I ON S.item_id = I.item_id WHERE I.item_name = 'kufr' AND price > 250 AND quantity > 10
Takto mám dobře?
Téměř. Zadání je vypsat název dodavatele, množství a cenu. Je teda potřeba ještě získat jméno dodavatele:
SELECT s.supplier_name, store.price, store.quantity FROM store
JOIN item i ON store.item_id = i.item_id
JOIN supplier s ON store.supplier_id = s.supplier_id
WHERE i.item_name = 'kufr' AND store.price > 250 AND store.quantity > 10
Mimochodem, na tomhle dotazu je EXPLAIN už mnohem
zajímavější.
Vypsalo mi to
Nested Loop (cost=20.76..5888.41 rows=8 width=229)
-> Hash Join (cost=20.76..5886.15 rows=8 width=15)
Hash Cond: (store.item_id = i.item_id)
-> Seq Scan on store (cost=0.00..5834.00 rows=8350 width=23)
Filter: ((price > 250::numeric) AND (quantity < 10))
-> Hash (cost=20.75..20.75 rows=1 width=8)
-> Seq Scan on item i (cost=0.00..20.75 rows=1 width=8)
Filter: ((item_name)::text = 'kufr'::text)
-> Index Scan using supplier_pkey on supplier s (cost=0.00..0.27 rows=1 width=222)
Index Cond: (s.supplier_id = store.supplier_id)
Ono lze ještě provést nějakou tu optimalizaci, aby bylo o něco
rychlejší?
"Optimize the previous query in such way that the execution will be
significantly faster (at least 30% reduction in estimated costs).
Caveat: The optimization has to be generic, i.e. good for this type of query (so
item name, price and quantity bounds may change)!"
Tak jsem nakonec vytvoril index u quantity, item_name, a nejake to zrychleni je videt
Zobrazeno 6 zpráv z 6.