abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 13:33 | Nová verze

    HelenOS (Wikipedie), tj. svobodný operační systém českého původu založený na architektuře mikrojádra, byl vydán ve verzi 0.14.1. Přehled novinek v poznámkách k vydání. Vypíchnou lze nabídku Start.

    Ladislav Hagara | Komentářů: 0
    včera 23:22 | Zajímavý software

    BreadboardOS je firmware pro Raspberry Pi Pico (RP2040) umožňující s tímto MCU komunikovat pomocí řádkového rozhraní (CLI). Využívá FreeRTOS a Microshell.

    Ladislav Hagara | Komentářů: 0
    včera 16:55 | Nová verze

    Vývojáři KDE oznámili vydání balíku aplikací KDE Gear 24.05. Přehled novinek i s náhledy a videi v oficiálním oznámení. Do balíku se dostalo 5 nových aplikací: Audex, Accessibility Inspector, Francis, Kalm a Skladnik.

    Ladislav Hagara | Komentářů: 2
    včera 12:55 | Nová verze

    Byla vydána (𝕏) nová verze 18.0.0 open source webového aplikačního frameworku Angular (Wikipedie). Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    22.5. 23:44 | Pozvánky

    V neděli 26. května lze navštívit Maker Faire Rychnov nad Kněžnou, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    22.5. 16:33 | Nová verze

    Byla vydána nová stabilní verze 3.20.0, tj. první z nové řady 3.20, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Z novinek lze vypíchnou počáteční podporu 64bitové architektury RISC-V.

    Ladislav Hagara | Komentářů: 0
    22.5. 14:11 | IT novinky

    Společnost Jolla na akci s názvem Jolla Love Day 2 - The Jolla comeback představila telefon se Sailfish OS 5.0 Jolla Community Phone (ve spolupráci se společností Reeder) a počítač Jolla Mind2 Community Edition AI Computer.

    Ladislav Hagara | Komentářů: 8
    22.5. 12:33 | Nová verze

    LibreOffice 24.8 bude vydán jako finální v srpnu 2024, přičemž LibreOffice 24.8 Alpha1 je první předběžnou verzí od začátku vývoje verze 24.8 v prosinci 2023. Od té doby bylo do úložiště kódu odesláno 4448 commitů a více než 667 chyb bylo v Bugzille nastaveno jako opravené. Nové funkce obsažené v této verzi LibreOffice najdete v poznámkách k vydání.

    ZCR | Komentářů: 0
    21.5. 23:33 | Nová verze

    Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 141 (pdf) a HackSpace 78 (pdf).

    Ladislav Hagara | Komentářů: 0
    21.5. 21:22 | Nová verze

    Byla vydána verze 2.0.0 programovacího jazyka Kotlin (Wikipedie, GitHub). Oficiálně bude představena ve čtvrtek na konferenci KotlinConf 2024 v Kodani. Livestream bude možné sledovat na YouTube.

    Ladislav Hagara | Komentářů: 2
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (82%)
     (4%)
     (7%)
     (7%)
    Celkem 522 hlasů
     Komentářů: 16, poslední 14.5. 11:05
    Rozcestník

    Dotaz: optimalizacia dotazu

    8.7.2009 08:42 peter
    optimalizacia dotazu
    Přečteno: 345×

    Ahoj mam tabulku v ktorej sa nachadza priblizne 1500 zaznamov, dalsie zaznami tam budu pribudat. v tabulke sa nachadza stlpec ktory identifikuje cloveka, je to tabulka prichodov a odchodov z prace. potrebujem z tabulky casto ziskavat najnovsi zaznam konkretneho cloveka. Ktory dotaz by bol vykonostne lepsi, zatial ma napadlo iba toto: SELECT dochadzka_id FROM dochadzka ORDER BY dochadzka_id DESC LIMIT 1

    v tabulke dochadzka sa nachadzaju este stlpce: person_id, prichod_timestamp, odchod_timestamp.

    Odpovědi

    8.7.2009 08:50 Zbyněk Petr (Zboňa) | skóre: 6 | blog: zbona | Brno / Vyškov
    Rozbalit Rozbalit vše Re: optimalizacia dotazu

    Ahoj, nevím, co na tomto dotazu optimalizovat... Jen je potřeba, aby byl nad dochazka_id index resp. primární klíč. A ještě ti tam chybí WHERE podmínka na person_id (tento sloupec by měl mít také index). Tedy v MySQL bych to napsal asi nasledovně a v náročnosti dotazu problém nevidím:

    SELECT dochadzka_id FROM dochadzka WHERE person_id = 1 ORDER BY dochadzka_id DESC LIMIT 0,1

    8.7.2009 09:12 FooBar
    Rozbalit Rozbalit vše Re: optimalizacia dotazu

    To je dost neskutecne sileny "reseni". Mit v aplikaci hardcoded, ze minimalni person_id je 1? A co kdyz nekdo toho prvniho clovicka odmaze z databaze, to se bude delat uprava i v kodu?...

    8.7.2009 09:13 FooBar
    Rozbalit Rozbalit vše Re: optimalizacia dotazu

    Aaa, omlouvam se takhle brzo rano, spletl jsem si person_id a dochadka_id :)

    8.7.2009 09:18 peter
    Rozbalit Rozbalit vše Re: optimalizacia dotazu

    No napadlo ma take riesenie, ze dam do tabulky dochadzka trigger, ktory do tabulky posledna_dochadzka vzdy po inserte noveho zaznamu na konkretnu osobu vlozy posledne toto id, myslite ze to bude vykonostne horsie s tymto trigerom ako ked mam prehladavat takuto kopu zaznamov?

    8.7.2009 09:57 saslik
    Rozbalit Rozbalit vše Re: optimalizacia dotazu

    To zalezi na tom, jak se to bude pouzivat - trigger nema zadny vliv na dotazy, zvysuje pouze cenu insertu. Pokud ti to opravdu pripada tak kriticke, tak pri typickem pouziti (caste dotazy, neprilis caste inserty) toto muze byt dobra volba. Pro radove tisice zaznamu si ale myslim, ze rozdil nebude na rozumnem hardwaru (a databzi) pozorovatelny.

    8.7.2009 10:17 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: optimalizacia dotazu

    Záleží na tom, kolik budete provádět těch insertů a kolik těch dotazů na poslední příchod. Řešení s poznamenáním si id posledního příchodu (nemusí to být trigger, můžete použít i proceduru a insertovat zásadně jen přes ni) zpomalí insert a zrychlí select. Vzhledem k tomu, že z podstaty věci nepůjde pro jednoho člověka o více než jednotky insertů za den, zvýšením náročnosti insertu bych se moc netrápil. Další možností je samozřejmě udělat si na té tabulce index, ale přes to pomocné pole s id posledního příchodu to asi bude jednodušší, pokud nevyužijete řazení starších příchodů.

    Ještě technická poznámka: 1500 řádků v tabulce není žádná "takáto kupa záznamov", to je pořád docela malá tabulka.

    9.7.2009 08:05 tomfi | skóre: 19
    Rozbalit Rozbalit vše Re: optimalizacia dotazu

    Pokud potřebuješ ten záznam "často" jak píšeš, příjde mi i přes to, že se může jednat o zpomalení insertu logičtější ukládat si ten poslední příchod jako speciální hodnotu a tu pak nevyhledávat.

    Je tu ještě otázka toho, jestli při vysokém vytížení je poslední přidělené ID opravdu posledním záznamem přidaným do tabulky, ale uznávám že při 1500 záznamech a pracovní morálkou čechů není zase tak vysoce pravděpodobném, že by se tento problém vyskytl :D.

    Vždyť jsou to jen jedničky a nuly ...
    9.7.2009 08:07 tomfi | skóre: 19
    Rozbalit Rozbalit vše Re: optimalizacia dotazu

    Ještě přihodím... možná se vyplatí nahlédout sem http://msdn.microsoft.com/en-us/library/aa259185%28SQL.80%29.aspx

    Vždyť jsou to jen jedničky a nuly ...
    20.10.2009 10:05 posejdon
    Rozbalit Rozbalit vše Re: optimalizacia dotazu
    Ohledne optimalnosti navrzeneho dotazu. Problem je to, ze casem budes radit par tisic zaznamu, pricemz ti staci znat jenom nejvyssi/nejnizsi. V pripade, ze v tvem reseni bude puvodni select vracet relevantni data, sel by prepsat na toto a povali urcite rychleji

    SELECT max(dochadzka_id) FROM dochadzka [WHERE id_person=...]

    Ovsem razeni podle id opravdu neni nejlepsi reseni, sekvence zrucuje jedinecnost, nikoli posloupnost. Kdyz db poslape na vice nodech tak ma zpravidla nakesovany id a kazdy node muze aktualne prirazovat id z jineho rozsahu. Proto je spravnejsi se ptat na dobu vlozeni/zmeny zaznamu. Nicmene pri danem navrhu to nebude opet zcela trivialni, protoze prichodem se bude nejspis insertovat a odchodem updatovat a porovnavani budeme muset delat podle dvou sloupcu. Takze by to chtelo budto pridat sloupec modiftime (a s narustajicim poctem zaznamu se sikne i index), nebo prekopat zcela logiku tabulky a ukladat zvlast zaznamy pro prichod a odchod a rozlisit je typem.

    SELECT d.id_dochadzka FROM dochadzka d WHERE d.id_person=1 and d.modiftime = (SELECT max(t.modiftime) FROM dochazka t WHERE t.id_person = d.id_person)

    Predpokladam, ze tezko v jeden okamzik bude mit clovek vice zaznamu, to by se pak muselo resit nejakou agregacni funkci. V subselectu misto t.id_person = d.id_person muze byt primo cislo, snizuje to cost. Jestli je to nejaka vyspelejsi db, bude mozne vyhnout se subselectu nejakou statistickou nebo agregacni funkci, nicmene jestli je to vyhodnejsi nebo ne asi bude treba vyzkouset.

    Reseni s triggerem neni podle me nejlepsi, protoze to zbytecne bude prochazet tabuli a updatovat predchozi zaznam a spomali to dobu insertu -> prodlouzi dobu zamku nad tabulkou

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.