Zadejte hledaný výraz...

vytvaret tabulku nebo sloupec?

Václav Mach
verified
rating uzivatele
(13 hodnocení)
21. 11. 2010 20:21:06
taky si přisadím:
řešení č.2 tj. samostatná tabulka je určitě správné z hlediska zásad normalizace databáse, adaptability atd. atd. Nicméně pokud bychom uvažovali výkon u velké databáze, mohlo by být serializované pole lepší. Vemte si příklad - z 100 000 řádek v tabulce uživatelů vyber profily od čísla 50000 do 50100 u kterých vybírající není v banu. U druhé varianty se asi neobejdeme bez dotazu používajího NOT EXISTS proti druhé tabulce a ikdyž tam budeme mít jako klíč id vybírajícího, může to být nepříjemně pomalé, možná o dost pomalejší než vybírat jen z první tabulky. rozbalovat a testovat pole.
Já osobně bych si u velkého systému vytvořil dostatečně velké testovací tabulky a projel si obě varianty profilerem.
21. 11. 2010 20:21:06
https://webtrh.cz/diskuse/vytvaret-tabulku-nebo-sloupec/strana/2#reply585439
milda
verified
rating uzivatele
(1 hodnocení)
21. 11. 2010 22:15:51
Napsal webdnes;599504
Já osobně bych si u velkého systému vytvořil dostatečně velké testovací tabulky a projel si obě varianty profilerem.
Pokud by ses hodně nudil a udělal podobný srovnání, určitě ho zveřejni, moc by mě to zajímalo (pro různé počty záznamů by z toho mohl být krásnej graf).
Podobné soudy (bez testů) mi připadají jako snaha o předčasnou optimalizaci - snažíte se optimalizovat něco co ještě ani nefunguje. Osobně považuji za lepší navrhnout a postavit aplikaci podle správných zásad a optimalizovat až místa o kterých zjistím, že aplikaci skutečně brzdí.
Pravidlo 80%:20% snad ani není třeba připomínat....
21. 11. 2010 22:15:51
https://webtrh.cz/diskuse/vytvaret-tabulku-nebo-sloupec/strana/2#reply585438
Václav Mach
verified
rating uzivatele
(13 hodnocení)
22. 11. 2010 11:07:01
bohužel se nenudím ...
v jedné mé aplikaci je přesně tohle úzké místo, je to sice o něco složitější než uvedený příklad ale zase tabulky jsou v řádech pouhých tisícovek řádků a už tam ty dotazy NOT EXISTS výrazně zdržujou .... příště si dám u podobného problému pozor
22. 11. 2010 11:07:01
https://webtrh.cz/diskuse/vytvaret-tabulku-nebo-sloupec/strana/2#reply585437
hm
verified
rating uzivatele
(20 hodnocení)
22. 11. 2010 11:12:01
Napsal webdnes;599618
bohužel se nenudím ...
v jedné mé aplikaci je přesně tohle úzké místo, je to sice o něco složitější než uvedený příklad ale zase tabulky jsou v řádech pouhých tisícovek řádků a už tam ty dotazy NOT EXISTS výrazně zdržujou .... příště si dám u podobného problému pozor
promin ale u par tisic radku ti nemuze zadny dotaz zdrzovat (rozhodne ne takovy co dela tak trivialni vec), mel bys prehodnotit dotaz i indexy ktere se k nemu vztahuji... uprimne nevim proc pouzivas not exists jestli tam mas naky subdotaz a s tim se pak v dotazu pracuje tak se vubec nedivim ze to jede pomalu, protze to je taky pekna blbost :)
22. 11. 2010 11:12:01
https://webtrh.cz/diskuse/vytvaret-tabulku-nebo-sloupec/strana/2#reply585436
Václav Mach
verified
rating uzivatele
(13 hodnocení)
22. 11. 2010 17:18:47
Napsal AlesiBoss;599619
promin ale u par tisic radku ti nemuze zadny dotaz zdrzovat (rozhodne ne takovy co dela tak trivialni vec), mel bys prehodnotit dotaz i indexy ktere se k nemu vztahuji... uprimne nevim proc pouzivas not exists jestli tam mas naky subdotaz a s tim se pak v dotazu pracuje tak se vubec nedivim ze to jede pomalu, protze to je taky pekna blbost :)
psal jsem že je to složitější a o triviální věci nepadlo ani slovo, ale to bychom zbytečně odbočovali
ale k věci - ty máš nějaký lepší způsob než je NOT EXISTS když píšeš že je to blbost? rád se poučím, mohl bys ho prosím vysvětlit na tom prvním příkladu - vytáhnout 100 řádek z tabulky n pro které neexistuje žádný záznam v tabulce m (bany) k dispozici máš pochopitelně id uživatele který dotaz provádí a které může být libovolným počtem uživatelů banováno
22. 11. 2010 17:18:47
https://webtrh.cz/diskuse/vytvaret-tabulku-nebo-sloupec/strana/2#reply585435
hm
verified
rating uzivatele
(20 hodnocení)
22. 11. 2010 21:57:57
Napsal webdnes;599762
ale k věci - ty máš nějaký lepší způsob než je NOT EXISTS když píšeš že je to blbost? rád se poučím, mohl bys ho prosím vysvětlit na tom prvním příkladu - vytáhnout 100 řádek z tabulky n pro které neexistuje žádný záznam v tabulce m (bany) k dispozici máš pochopitelně id uživatele který dotaz provádí a které může být libovolným počtem uživatelů banováno
ppouzil bych jeden dotaz a to
SELECT * FROM n LEFT JOIN m ON (m.user_id=n.id AND m.banned_id = DOSADIT_ID_UZIVATELE_NA_VYPIS) WHERE m.user_id IS NULL LIMIT 0,100
jeste to otestuju na nejake velke nahodne generovane db, jake rychlostni rozdily tam budou u tehc dvou ruznych dotazu
Podle testu vede JION o par jendotek procent v prumeru (je tedy lepsi,a le ne o moc)
Nejdrive vedl JOIN o hodne, ale prikladam to chybe v pocitani behu scriptu, kdyz jsem to ustalil tak tam tak markantni rozdily nejsou :) kazdopadne jsem si jist ze u nejakeho slozitejsiho dotazu by joiny vedli a jakekoliv pouzivani not exists by vykonu uskodilo mnohem znatelneji
22. 11. 2010 21:57:57
https://webtrh.cz/diskuse/vytvaret-tabulku-nebo-sloupec/strana/2#reply585434
Václav Mach
verified
rating uzivatele
(13 hodnocení)
23. 11. 2010 00:51:19
Díky za zajímavou odpověď, trochu se divím, člověk by řekl že když už je jednou v engine NOT EXISTS zabudované tak bude rychlejší než pokusy jej obejít
23. 11. 2010 00:51:19
https://webtrh.cz/diskuse/vytvaret-tabulku-nebo-sloupec/strana/2#reply585433
hm
verified
rating uzivatele
(20 hodnocení)
23. 11. 2010 00:56:18
Napsal webdnes;599919
člověk by řekl že když už je jednou v engine NOT EXISTS zabudované tak bude rychlejší než pokusy jej obejít
podle me to neni pokus ho obejit, pouze ej to jine reseni stejneho problemu. Podle me celkove joiny a prace se spravnymi indexy (a pouzivani innodb misto myisam hlavne kvuli foreign keyum) je temer vzdy nejlepsi cesta co do vykonu... i kdyz uznavam ze zapis s not exists je mirne cistci :)
23. 11. 2010 00:56:18
https://webtrh.cz/diskuse/vytvaret-tabulku-nebo-sloupec/strana/2#reply585432
Pro odpověď se přihlašte.
Přihlásit