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

Byla vydána verze 3.11 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Řešena je řada bezpečnostních chyb.

Ladislav Hagara | Komentářů: 0
dnes 15:22 | Nová verze

Byl vydán Mozilla Firefox 64.0. Přehled novinek v poznámkách k vydání a na stránce věnované vývojářům. Nejnovější verze tohoto webového prohlížeče přináší například ovládání více panelů, nebo správce úloh, který lze otevřít v nabídce Firefoxu > Více > Správce úloh, nebo napsáním about:performance do adresního řádku.

Ladislav Hagara | Komentářů: 4
dnes 13:00 | Zajímavý článek Ladislav Hagara | Komentářů: 0
včera 22:33 | Nová verze

Po 3 měsících vývoje od vydání verze 14 byla vydána nová stabilní verze 15 open source systému Nextcloud, forku ownCloudu, umožňujícího provoz vlastního cloudového úložiště. Přehled novinek i s náhledy v příspěvku na blogu. Pro vyzkoušení Nextcloudu je k dispozici demo.

Ladislav Hagara | Komentářů: 4
včera 18:00 | IT novinky

Počítačová hra Doom slaví 25 let. Společností id Software ji vydala 10. prosince 1993. Zahrát si ji lze například na Internet Archive.

Ladislav Hagara | Komentářů: 14
9.12. 23:55 | Zajímavý článek

Nakladatelství Raspberry Pi vydalo 244 stránkového průvodce pro úplné začátečníky s jednodeskovým počítačem Raspberry Pi The Official Raspberry Pi Beginner’s Guide (pdf). Programování ve visuálním programovacím jazyce Scratch je věnována nová příručka Code Club Book of Scratch Volume 1 (pdf). Vydáno bylo také třetí číslo časopisu věnovaného počítačovým hrám Wireframe (pdf).

Ladislav Hagara | Komentářů: 0
9.12. 23:44 | Nová verze

U příležitosti oslav jednoho roku prací na debianím balíčku, vyšlo GPXSee 7.0. Nová verze přináší zejména podporu vektorových map (Mapbox PBF) pomocí nově vzniklého Qt pluginu.

Martin Tůma | Komentářů: 8
7.12. 23:33 | Nová verze

UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch (seznam podporovaných zařízení), oznámila vydání nové verze Ubuntu Touch OTA-6. Zdůrazněna jsou například vylepšení webového prohlížeče Morph.

Ladislav Hagara | Komentářů: 0
7.12. 21:33 | Komunita

Richard Hughes na svém blogu informuje, že se společnost AMI (American Megatrends Incorporated), největší dodavatel firmwarů a BIOSů (AMIBIOS, Aptio, ...), zapojila do projektu LVFS (Linux Vendor Firmware Service). Seznam projektem podporovaných zařízení by se měl tedy časem rozšířit.

Ladislav Hagara | Komentářů: 0
7.12. 20:11 | Komunita

Nadace pro svobodný software (FSF) informuje, že seznam doporučených svobodných distribucí GNU/Linuxu byl rozšířen o distribuci Hyperbola GNU/Linux-libre. Hyperbola vychází z Arch Linuxu a na rozdíl od něj splňuje požadovaná kritéria.

Ladislav Hagara | Komentářů: 7
Chystáte se přejít na Wayland na „desktopu“?
 (26%)
 (7%)
 (11%)
 (30%)
 (26%)
Celkem 105 hlasů
 Komentářů: 14, poslední včera 12:19
Rozcestník

Dotaz: sqlite - ako je lepšie použiť indexy

4.3.2017 18:11 adrinko | skóre: 22
sqlite - ako je lepšie použiť indexy
Přečteno: 930×
Dobrý deň,

mám tabuľku 'data' so stĺpcami id (auto_increment) id_device (integer) timestamp(numeric).

Volám pre ňu tieto dva selekty:
select * from data where id<10000000 and id_device=345
alebo
select * from data where id<10000000 and id_device=345 and timestamp>'2017-01-01 10:00:00' and timestamp<'2017-03-01 08:00:00'
Ako je prosím najefektívnejšie nadefinovať indexy?
CREATE INDEX idx1 ON data(id, id_device);
alebo sólo index pre id (už je autoincrement), sólo pre id_device, sólo pre timestamp? Alebo ich rovno skombinovať ako INDEX idx2 ON data (id, id_device, timestamp)?

Vďaka vopred za poradenie, v indexoch nie som doma...

Řešení dotazu:


Odpovědi

4.3.2017 21:05 jekub
Rozbalit Rozbalit vše Re: sqlite - ako je lepšie použiť indexy
Nějak mi nedává smysl zahrnutí id(auto) do podmínky. Nastavil bych index (id_dev,time). Stačí ale vyzkoušet - explain. Index ovlivňuje nejen select, ale i další příkazy. Např. masivní inserty, např. import rozsáhlého souboru dat.
5.3.2017 10:15 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: sqlite - ako je lepšie použiť indexy
"id" tam mám preto, lebo niekedy chcem len niektoré vybrať podľa preferencie, teda ci su pod/nad určitú hodnotu toho "id"
5.3.2017 10:23 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: sqlite - ako je lepšie použiť indexy
pardón, nie niekedy, ale to id pre istotu používam vždy, lebo systém nemusím mať vždy aktuálny timestamp, lebo ten systém s takouto databázou nemá real-time clock modul a nemusí byť vždy pripojený na internet (to je hlavne pre ten prípad, kde nepoužívam v selekte timestamp).
5.3.2017 12:00 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: sqlite - ako je lepšie použiť indexy
Ďakujem pekne. Zase som sa niečo nové naučil (skúšam ten EXPLAIN a rôzne kombinácie indexov) :)
4.3.2017 21:26 Kit | skóre: 42 | Brno
Rozbalit Rozbalit vše Re: sqlite - ako je lepšie použiť indexy
Asi bych použil
CREATE INDEX idx1 ON data(id_device, timestamp);
protože tyto dva sloupce hrají při selectu zásadní roli.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
5.3.2017 10:45 chrono
Rozbalit Rozbalit vše Re: sqlite - ako je lepšie použiť indexy
A v tomto poradí preto, lebo tie stĺpce sa používajú postupne zľava. Teda, ak sa nerozhodne už pri prvom stĺpci, použije sa druhý... (a keďže sa id_device porovnáva na identitu, ďalšie prípadné porovnávanie timestamp bude obsahovať oveľa menej možných riadkov)
5.3.2017 11:59 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: sqlite - ako je lepšie použiť indexy
Ďakujem pekne. Zase som sa niečo nové naučil (skúšam ten EXPLAIN a rôzne kombinácie indexov) :)
5.3.2017 20:51 Filip Jirsák | skóre: 67 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: sqlite - ako je lepšie použiť indexy
Když nevíme, jak vypadá rozložení dat, těžko radit. Indexy se nastavují tak, abyste na základě indexu vybral co nejmenší množinu dat. U prvního příkladu je tedy důležité, která z těch dvou podmínek vybere menší množství záznamů. Předpokládám, že to bude id_device – pak vytvořte index z dvojice (id_device, id). Pokud má smysl přidávat tam index i pro ten druhý dotaz, přidejte timestamp na jeho konec. Pro první dotaz se pak použije jenom začátek indexu, pro druhý celý index (id_device, id, timestamp).
alebo sólo index pre id (už je autoincrement), sólo pre id_device, sólo pre timestamp?
To určitě ne. Použil by se jen jeden index s největší selektivností a ty zbývající dva by byly k ničemu. Více indexů najednou by se použilo jen ve velmi specifických případech – pokud se vyplatí vybrat seznam záznamů podle jednoho indexu, vybrat seznam záznamů podle druhého indexu a pak najít společné prvky obou seznamů.
7.3.2017 17:10 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: sqlite - ako je lepšie použiť indexy
ďakujem pekne. S EXPLAIN testujem rôzne kombinácie indexov. Napr. pre ten select s timestamp si ako najvhodnejší sqlite vybrala index INDEX id_device, timestamp, id

data su:
id	        integer Auto Increment
id_device	integer [0]
timestamp	numeric NULL
7.3.2017 20:47 Filip Jirsák | skóre: 67 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: sqlite - ako je lepšie použiť indexy
S tím, co vám napíše explain, je potřeba zacházet opatrně. V rámci jednoho explain by měl poměr hodnot odpovídat (tj. zjistíte, co je na daném dotazu nejproblematičtější), ale porovnávat hodnoty z různých příkazů už je ošemetné, protože to mohou být úplně nesouměřitelná čísla. Taky myslete na to, že údržba indexů není zadarmo, tj. při každém insertu, updatu a deletu je nutné příslušným způsobem upravit i indexy. Ve vašem případě je asi to omezení času selektivnější, než omezení na id, což se snadno může změnit, pokud budete hledat větší rozpětí času. Navíc uvedený index vám moc nepomůže k tomu prvnímu selectu – půjde podle něj jen vybrat všechny záznamy s daným id_device, ale dál už je bude nutné projít všechny.
8.3.2017 11:10 EtDirloth | skóre: 7
Rozbalit Rozbalit vše Re: sqlite - ako je lepšie použiť indexy
Este doplnim, ze je potrebne testovat s aktualnymi statistikami. Tie je mozne aktualizovat (napr. po importe dat) spustenim prikazu ANALYZE;

Pri vybere vhodneho indexu pre sadu dotazov vzdy zalezi na reduktivnosti pouzivanych podmienok a tie najreduktivnejsie preferovat (o to sa tiez snazi planner). To vzdy zalezi na povahe dat v tabulke (ako uz bolo spomenute) a na konstantach pouzivanych v podmienkach, preto treba poznat data aj dotazy. Teda ak je typicky pouzivana podmienka id<1000000 a takych zaznamov je milion, tak id netreba indexovat, pretoze vhodnejsie je spravit full table scan.
  • Ak ale taku podmienku doplnime o id_device=$konstanta, pricom vies, ze pre lubovolnu konstantu ich bude povedzme stovky, tak je to dobry kandidat na index.
  • Moze sa tiez stat, ze uzivatelom zadavany rozsah timestampov je aplikacne obmedezny na tri mesiace a ty vies, ze za tri mesiace su typicky iba desiatky zaznamov. Vtedy treba preferovat timestamp - resp. v tvojom pripade dva samostatne indexy namiesto spominaneho (id_device,timestamp).
8.3.2017 15:50 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: sqlite - ako je lepšie použiť indexy
Vďaka za odpovede páni!

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.