Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



indexy - kdy použít, kdy ne

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: indexy - kdy použít, kdy ne

Autor: Mi.Chal

10:35:14 27.11.2011

grafnev Napsal:
-------------------------------------------------------
> (10000 zaznamu je treba pro me tak mala tabulka, ze ani
> neresim nejake optimalizace)

zalezi taky na tom, co se s daty dela. Pokud ji budes joinovat samu se sebou, tak asi bude znatelny rozdil, jestli budes prochazet NlogN nebo N^2 radku

Citovat příspěvek

 

Re: indexy - kdy použít, kdy ne

Autor: grafnev

0:37:11 27.11.2011

Ono asi bude hodne zalezet na databazi ... zda se index ma nebo nema tvorit (delam na teradate a tam je prace s ruznymi druhy indexu zajimava)
a asi take na stroji na kterem to jede ... od kolika zaznamu by se mel index tvorit (10000 zaznamu je treba pro me tak mala tabulka, ze ani neresim nejake optimalizace)

Citovat příspěvek

 

Re: indexy - kdy použít, kdy ne

Autor: johny003

20:18:23 26.11.2011

díky moc za odpovědi..vzal jsem si je k srdci:) je pravda že se dají vždycky v budoucnu doplnit, až záznamů bude víc:).. díky

Citovat příspěvek

 

Re: indexy - kdy použít, kdy ne

Autor: Pavel Stehule

10:40:33 26.11.2011

johny003 Napsal:
-------------------------------------------------------
> Ahoj,
> přemýšlím o tvorbě indexů v mé databázi a chtěl
> jsem se jen zeptat z vašich zkušeností, řádově
> kolik řádků a jaká musí být variabilita hodnot
> daného atributu, aby měl index smysl.. všude se
> uvádí, že nemá smysl na menších tabulkách, ale já
> ještě nejsem tak zkušený, abych si pod tím
> představil konkrétní číslo..
>
> Taky jsem četl, že má smysl na všech cizích
> klíčích, ale mám třeba tabulku o 200 řádcích, v
> níž je cizí klíč odkazující se na tabulku s 90
> řádky.. má v takovém případě index smysl? Nebo je
> to spíš věc vhodnější pro daleko větší tabulky?
>
Orientačně někde mezi 1000 a 10000 řádky - u širokých tabulek je to spíš ta 1000, u úzkých (10 sloupců) spíš 5000 a výš. Pro menší tabulky jsou indexy zbytečné. Sice opticky mohou být jednotlivé dotazy s indexem rychlejší při testování, ale v provozu, kdy se session tlučou o cache a disk to už tak nebývá.

Hodně také záleží na db a konkrétním dotazu - zvlášť MySQL je hodně citlivá na chybějící indexy v některých dotazech, kde by index normálně nebyl. Bez indexů jsou dotazy zoufale pomalé (což je problém především MyISAM).

Nemá cenu indexovat sloupce, kde se často opakují hodnoty - záleží na konkrétní situaci a db, ale např. nemá cenu indexovat pohlaví, kraj, okres.

Nové databáze zbytečné indexy ignorují - nevýhodou zbytečných indexů je záběr místa na disku a zpomalení UPDATE, INSERT, DELETE. Co index, to je 1x pomalejší operace.

Pavel

Citovat příspěvek

 

Re: indexy - kdy pouzit, kdy ne

Autor: kocman

10:37:57 26.11.2011

> Pokud nevíš tak tam index dej.
> Naopak provoz tabulek bez indexů je doména profesionálů kteří vědí co dělají.

Spíše se setkávám s praxí, když si nejsi jistý, index tam nedávej :)
Samozřejmě s rozmyslem. Ale třeba ten případ spojení 200 vs 90 řádků,
pokud to jsou tabulky o pár, hlavně fixních velikostech řádků, tak
bych se bez indexu nebál. A kdyby byl časem problém, tak se to tam
hravě přidá.


--
Jiří Kocman
http://www.jirikocman.cz

Příspěvek zaslán emailem

Citovat příspěvek

 

Re: indexy - kdy pouzit, kdy ne

Autor: kocman

10:35:07 26.11.2011

Obecně se indexy vytváří nad sloupci, podle kterých se vyhledává, na
sloupcích, podle kterých se třídí a nad cizími klíči. To zda index
vytvořit nebo ne, závisí na mnoha faktorech.

z tabulky budu hlavně číšt nebo do ní zapisovat? zápis indexů operaci zpomaluje

jak velká ta tabulka je - počet řádků? pro číselník o 5 řádcích to
fakt smysl nedává (obvykle).

jaká data budu z tabulky číst a jak rychle mají být dostupná?
Například v ekonomickém SW mě budou asi zajímat faktury za poslední
rok, faktury za 10 let zpět normálně vidět nepotřebuji, takže počkat
si na ně pár sekund není problém. Takže tento problém vyřeším
partitioningem třeba po letech (fyzické rozdělení dat v tabulce na
části po kalendářních letech, takže třeba součet faktur za rox XY je
rychlý i bez indexu).

Ad index nad cizím klíčem... ano, sloupec přes který spojuji jiné
tabulky si index zaslouží, ale právě v uváděném případě 200 vs 90
řádků to už takový význam mít nebude, záleží co je to za tabulky a zda
je DB dokáže přečíst v rámci jedné I/O operace, pokud ano, index je
přítěží.

Nicméně vše je jen teorie a teprve praxe ukáže, zda indexy někde
chybí, nebo kde přebývají. Obvykle takovou věc člověk zjistí až po
nějaké době běhu aplikace v ostrém provozu, které mimo jiné ovlivňuje
chování uživatelů.

Vše samozřejmě také ovlivňuje použitá databáze a její možnosti
optimalizace. Například zmíněný partitioning může být poměrně úspěšně
použitý jako "index" ale ne všechny DB to umí a samozřejmě ne vždy to
je výhodné. Optimalizace pak může jít tak hluboko kdy data a indexy
leží na různých discích (polích) na separátních řadičích, klidně až na
úrovni jednotlivých tabulek a indexů, může se nastavovat velikost
bloku filesystému, kolik OS bloků se přečte při jednom fyzickém čtení
z disku, (například proto aby u rozsáhlejších tabulek docházelo ke
čtení celého řádku ba i tabulky na jednu operaci, což právě to druhé
eliminuje použití indexu) atd... Optimalizace výkonu je v případě
některých databází opravdu složitá disciplína a člověk se na ni může
specializovat (zvlášť u BI a DWH řešení - opravdu nám to železo musí
denně počítat přehledy/reporty 50 hodin? nešlo by to stihnout do 24
hodin aby ty přehledy byly jen den staré?)



--
Jiří Kocman
http://www.jirikocman.cz

Příspěvek zaslán emailem

Citovat příspěvek

 

Re: indexy - kdy použít, kdy ne

Autor: xyz3

10:31:56 26.11.2011

Pokud nevíš tak tam index dej.
Naopak provoz tabulek bez indexů je doména profesionálů kteří vědí co dělají.

Citovat příspěvek

 

indexy - kdy použít, kdy ne

Autor: johny003

9:53:20 26.11.2011

Ahoj,
přemýšlím o tvorbě indexů v mé databázi a chtěl jsem se jen zeptat z vašich zkušeností, řádově kolik řádků a jaká musí být variabilita hodnot daného atributu, aby měl index smysl.. všude se uvádí, že nemá smysl na menších tabulkách, ale já ještě nejsem tak zkušený, abych si pod tím představil konkrétní číslo..

Taky jsem četl, že má smysl na všech cizích klíčích, ale mám třeba tabulku o 200 řádcích, v níž je cizí klíč odkazující se na tabulku s 90 řádky.. má v takovém případě index smysl? Nebo je to spíš věc vhodnější pro daleko větší tabulky?

Díky moc.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: