Jak se databáze indexování funguje?

hlasů
1k

Vzhledem k tomu, že indexingje to důležité, protože vaše data nastavit zvýšení velikosti, může mi někdo vysvětlit, jak se indexovací práci na database-agnosticúrovni?

Informace o dotazech na index pole, podívejte se , jak dělat index I sloupec databáze .

Položena 04/08/2008 v 11:07
zdroj uživatelem
V jiných jazycích...                            


10 odpovědí

hlasů
2k

Proč je to potřeba?

Když jsou data uložena na úložné zařízení založené na disku, je uložen jako bloky dat. Tyto bloky jsou přístupné v celém svém rozsahu, což je atomová operace přístup k disku. bloky disků jsou uspořádány v podstatě stejným způsobem jako spojových seznamů; oba obsahují část pro data, ukazatel na umístění dalšího uzlu (nebo bloku), a to jak nemusí být ukládají po sobě.

Vzhledem k tomu, že lze třídit jen několik záznamů o jednom poli, můžeme konstatovat, že vyhledávání v poli, které se netřídí vyžaduje lineární hledání který vyžaduje N/2blokové přístupy (v průměru), kde Nje počet bloků, které tabulka rozložena. V případě, že pole je non-pole klíče (tj neobsahuje jedinečné položky), pak se celý tabulkový prostor musí být hledán u Nblok přistupuje.

Zatímco u seřazeném poli, Binary Search může být použit, který má log2 Nblokovat přístup. Také z toho důvodu jsou data je řazen vzhledem pole non-key, zbytek tabulky není třeba vyhledávat duplicitní hodnoty, jakmile se zjistí, že vyšší hodnota. Tak zvýšení výkonu je značný.

Co je to indexování?

Indexace je způsob třídění počet záznamů o více polích. Vytvoření indexu na pole v tabulce vytvoří další datové struktury, která drží hodnotu pole a ukazatel na záznam se týká. Tento index struktura je pak tříděny, což Binární vyhledávání, které mají být provedeny na něj.

Nevýhodou indexování je, že tyto indexy vyžadují další místo na disku, protože indexy jsou uloženy společně v tabulce pomocí MyISAM engine, tento soubor může rychle dosáhnout omezení velikosti podkladové systému souborů v případě, mnoho polí v rámci téže tabulky jsou indexovány ,

Jak to funguje?

Za prvé, pojďme nastínit schématu ukázkové tabulky databáze;

Název pole Typ dat Velikost na disku
id (primární klíč) unsigned int 4 bajty
firstName Char (50) 50 bytů
lastName Char (50) 50 bytů
emailAddress Char (100) 100 bajtů

Poznámka : char byl použit namísto varchar s cílem umožnit přesné velikosti na hodnotu disku. Tato databáze vzorek obsahuje pět miliónů řádků a je neindexovaných. Nyní bude analyzován výkon některých dotazů. Jedná se o dotaz pomocí id (a řazeny pole key) a jeden pomocí firstName (non-key netříděný pole).

Příklad 1 - seřazeny vs netříděného polí

Vzhledem k naší ukázkové databáze r = 5,000,000záznamů o pevné velikosti dává délku rekordního R = 204bajtů a jsou uloženy v tabulce pomocí MyISAM engine, který používá výchozí velikost bloku B = 1,024bytů. Blokační faktor tabulky by bfr = (B/R) = 1024/204 = 5záznamy na disku bloku. Celkový počet bloků potřebných k držet tabulky je N = (r/bfr) = 5000000/5 = 1,000,000bloky.

Lineární hledání na poli id by vyžadovalo průměrně N/2 = 500,000bloku přistupuje najít hodnotu vzhledem k tomu, že pole id je pole klíče. Ale protože je také řazen pole id, binární vyhledávání může být provedeno vyžadují v průměru log2 1000000 = 19.93 = 20bloku přistupuje. Okamžitě vidíme, je to drastické zlepšení.

Nyní firstName pole ani tříděného ani pole klíče, takže binární vyhledávání je nemožné, aniž jsou hodnoty jedinečné, a tak se tabulka bude vyžadovat vyhledávání na konec pro přesné N = 1,000,000blok přistupuje. Je to situace, která indexování si klade za cíl napravit.

Vzhledem k tomu, že záznam index obsahuje pouze indexované pole a ukazatel na původní dokument, to dá rozum, že to bude menší než záznamu multi-pole, které na který odkazuje. Takže index samotný vyžaduje méně diskové bloky, než původní tabulky, které proto vyžaduje méně blok přistupuje k iteraci. Schéma pro index na FIRSTNAME poli je uvedeno níže;

Název pole Typ dat Velikost na disku
firstName Char (50) 50 bytů
(Záznam pointer) Speciální 4 bajty

Poznámka : Ukazatele v MySQL jsou 2, 3, 4 nebo 5 bajtů v závislosti na velikosti tabulky.

Příklad 2 - indexování

Vzhledem k tomu, naši ukázkovou databázi r = 5,000,000záznamů s délkou index rekordní R = 54bytů a pomocí výchozí velikost bloku B = 1,024bytů. Blokační faktor indexu by bfr = (B/R) = 1024/54 = 18záznamy na disku bloku. Celkový počet bloků potřebných k držet index je N = (r/bfr) = 5000000/18 = 277,778bloky.

Nyní vyhledávání pomocí FIRSTNAME pole lze využít index ke zvýšení výkonu. To umožňuje pro binární hledání indexu s průměrem log2 277778 = 18.08 = 19bloku přístupů. Chcete-li zjistit adresu aktuálního záznamu, který vyžaduje další zablokovat přístup ke čtení, přinášet úhrn k 19 + 1 = 20zablokování přístupů, daleko od 1000000 bloku přístupů musí najít FIRSTNAME shodu v tabulce non-indexovaných.

Kdy by měl být použit?

Vzhledem k tomu, že vytvoření rejstříku vyžaduje další místo na disku (277,778 bloky navíc z výše uvedeného příkladu, zvýšení ~ 28%), a že příliš mnoho indexy mohou způsobit problémy, které vyplývají z omezení velikosti souborových systémů, musí být opatrní myšlenka použít k výběru správného pole indexovat.

Vzhledem k tomu, indexy se používají pouze k urychlení hledal odpovídající pole v záznamech, to dá rozum, že indexování pole, používané pouze pro výstup by byl pouhou ztrátou diskového prostoru a času na zpracování, když dělá vložku nebo odstranit operace, a tudíž je třeba se vyhnout. Také vzhledem k povaze binární vyhledávání, mohutnost nebo jedinečnost dat je důležité. Indexování na poli s mohutností 2 by rozdělení dat na polovinu, zatímco mohutnost 1000 se vrátí přibližně 1000 záznamů. S tak nízkou mohutnosti účinnost je redukována na lineární druhu, a optimalizace dotazů se vyhnout pomocí indexu, pokud mohutnost je méně než 30% z celkového počtu záznamu, účinně dělat index plýtvání místem.

Odpovězeno 04/08/2008 v 11:41
zdroj uživatelem

hlasů
168

Když jsem poprvé četl to bylo velmi užitečné pro mě. Děkuji.

Od té doby jsem získal určitou představu o stinné stránky vytváření indexů: pokud napíšete do tabulky ( UPDATEnebo INSERT IGNORE ) s jedním indexem, máte vlastně dva psací operace v souborovém systému. Jeden pro data tabulky a jiný pro údaje o indexu (a uchýlení se z ní (a - v případě, seskupený - za uchylovat z dat v tabulce)). Pokud tabulka a index se nacházejí na stejném pevném disku, to stojí víc času. Proto tabulka bez indexu (haldy), by umožnilo rychlejší operace zápisu. (pokud jste měli dva indexy byste skončit s třemi operací zápisu, a tak dále)

Nicméně definování dvou různých místech ve dvou různých pevných disků pro rejstříkových údajů a dat tabulky může snížit / odstranit problém zvýšené náklady na čas. To vyžaduje vymezení dalších souborů skupin se podle souborů na požadovaných pevných disků a vymezení místa tabulky / index, jak je požadováno.

Dalším problémem spojeným s indexy je jejich fragmentace v čase, jak je vložena dat. REORGANIZEpomáhá, musíte napsat rutiny, že to udělal.

V určitých scénářích hromada je užitečnější než tabulky s indexy,

např: - Pokud máte spoustu soupeřit zápisů, ale jen jedna noc číst i mimo otevírací dobu pro podávání zpráv.

Také diferenciace mezi clustery a bez clusterů indexy je poměrně důležité.

Pomohl mi: - Co do clusteru a bez seskupený index vlastně znamená?

Odpovězeno 30/04/2013 v 15:31
zdroj uživatelem

hlasů
124

Index je právě datová struktura, která dělá vyhledávání rychleji pro konkrétní sloupec v databázi. Tato struktura je obvykle b-tree nebo hash tabulky, ale může to být jakákoliv jiná logická struktura.

Pro více informací, doporučuji: Jak databáze indexy funguje? A jak se indexy pomoci?

Odpovězeno 20/02/2014 v 15:40
zdroj uživatelem

hlasů
86

Nyní řekněme, že chceme spustit dotaz najít všechny podrobnosti o všech zaměstnanců, kteří jsou označeny jako "ABC?

SELECT * FROM Employee 
WHERE Employee_Name = 'Abc'

Co by se stalo bez indexu?

Databázový software doslova se podívat na každý řádek v tabulce zaměstnanců, zda Employee_Name pro daný řádek je ‚Abc‘. A protože chceme, aby každý řádek s názvem ‚Abc‘ uvnitř něj, nemůžeme jen tak přestat dívat, jakmile najdeme pouze jeden řádek s názvem ‚Abc‘, protože tam by mohlo být jiné řádky s názvem Abc . Takže, každý řádek až do poslední řady, musí být hledán - což znamená, že tisíce řádků v tomto případě budou muset být přezkoumány v databázi najít řádky s názvem ‚Abc‘. To je to, co se nazývá úplnou kontrolu tabulky

Jak index databáze může pomoci výkonu

Celý bod mající index je urychlit vyhledávací dotazy v podstatě kácení počet záznamů / řádků v tabulce, které je třeba zkoumat. Index je datová struktura (nejběžněji B- strom), která ukládá hodnoty pro konkrétní sloupec v tabulce.

Jakým způsobem B-stromy index funguje?

Důvodem B- stromy jsou nejoblíbenější datová struktura pro indexy je vzhledem ke skutečnosti, že jsou časově úsporné zařízení - protože look-ups, delece a inzerce lze provádět v logaritmickém čase. A další z hlavních důvodů B- stromy jsou častěji používány proto, že lze třídit data, která je uložena uvnitř B-stromu. RDBMS obvykle určuje, které datové struktury se skutečně používá pro index. Ale v některých případech se některé RDBMS let, můžete skutečně určit, které datová struktura, chcete, aby vaše databáze použít při vytváření indexu sám.

Jak se index hash tabulka funguje?

Důvod, proč se používají hash indexy proto, že hashovací tabulky jsou velmi účinné, pokud jde o jen vzhlédl hodnoty. Takže dotazy, které porovnávají rovnosti do řetězce lze načíst hodnoty velmi rychle, pokud používají hash index.

Například dotaz jsme diskutovali dříve, by mohly těžit z hash indexu vytvořeného na sloupci Employee_Name. Způsob, jakým hash index bude fungovat je, že hodnota sloupce bude klíč do tabulky hash a skutečná hodnota mapována na tento klíč bude jen ukazatel na data řádků v tabulce. Vzhledem k tomu, hash tabulka je v podstatě asociativní pole, typický záznam bude vypadat jako „ABC => 0x28939", kde 0x28939 je odkaz na řádek tabulky, kde je Abc uložené v paměti. Vzhlédl hodnotu jako „ABC“ v indexu hash tabulky a dostat zpět odkaz na řádek v paměti je samozřejmě mnohem rychlejší než procházením tabulky se najít všechny řádky s hodnotou „Abc“ ve sloupci Employee_Name.

Nevýhody hash indexu

Hashovací tabulky se netřídí datové struktury a existuje mnoho typů dotazů, které hash indexy ani nemůže pomoci. Předpokládejme například, že chcete zjistit všechny zaměstnance, kteří jsou mladší 40 let. Jak jsi to mohl udělat s indexem hash tabulky? No, to není možné, protože hash tabulka je jen dobré pro vyhledávání párů klíčové hodnoty - což znamená, že dotazy, které kontrolují pro rovnost

Co přesně je uvnitř indexu databáze? Tak, teď víte, že index databáze je vytvořena na sloupec v tabulce, a že index ukládá hodnoty v tomto konkrétním sloupci. Ale je důležité si uvědomit, že index databáze neukládá hodnoty v jiných sloupcích stejného stolu. Například, když jsme vytvořit index na sloupec Employee_Name, to znamená, že hodnoty sloupců Employee_Age a Employee_Address nejsou také uloženy v indexu. Kdybychom jen ukládat všechny ostatní sloupce v indexu, pak by to bylo stejně jako vytvoření další kopie celé tabulky - což by zabírají příliš mnoho místa a bylo by velmi neefektivní.

Jak se databáze vědět, kdy použít index? Při dotazu jako „SELECT * FROM Zaměstnanec WHERE Employee_Name =‚Abc‘“ je spuštěn, bude databáze zkontrolujte, zda existuje index na sloupci (y) je dotazován. Za předpokladu, že sloupec Employee_Name má mít index vytvořený na něm, databáze bude muset rozhodnout, zda skutečně má smysl použít index najít tyto hodnoty jsou vyhledávány - protože tam jsou některé scénáře, kdy je ve skutečnosti méně efektivní, jak používat index databáze a účinnější jen skenovat celou tabulku.

Jaké jsou náklady na který má index databáze?

To zabírá prostor - a větší tabulku, větší index. Další představení hit s indexy je skutečnost, že kdykoliv budete přidávat, mazat nebo aktualizovat řádky v příslušné tabulce, stejné operace bude muset být provedeno do svého indexu. Uvědomte si, že index musí obsahovat stejný až do data minutu, co je ve sloupci (y) Stolní, že index vztahuje.

Jako obecné pravidlo, index by měl být vytvořen pouze na stůl v případě, že údaje v indexovaný sloupec budou dotazovány často.

viz též

  1. Co se sloupy obecně dělají dobré indexy?
  2. Jak databázové indexy práce
Odpovězeno 13/08/2016 v 18:36
zdroj uživatelem

hlasů
64

Klasickým příkladem „Index v knihách“

Vezměme si „knihu“ 1000 stran, děleno 100 sekcích, každý úsek s X stránkách.

Jednoduché, ne?

Nyní, aniž by stránku rejstříku, najít určitý úsek, který začíná písmenem „S“, nemáte jinou možnost, než skenování přes celé knihy. tj: strany 1000

Ale s stránky indexu na začátku, jste tam. A více, číst žádnou konkrétní část, na čem záleží, stačí se podívat přes indexové stránce, znovu a znovu, pokaždé. Po zjištění indexu odpovídající můžete efektivně přejít do sekce přeskočením další oddíly.

Ale pak, kromě 1000 stránek, budete potřebovat další ~ 10 stránek zobrazit stránku s rejstříkem, totálně 1010 stránek.

To znamená, že index je samostatná část, která ukládá hodnoty indexovaný sloupec + ukazatel na indexovanou řádku v seřazeném pořadí pro efektivní look-up.

Věci jsou jednoduché ve školách, je to tak? : P

Odpovězeno 23/04/2017 v 14:43
zdroj uživatelem

hlasů
40

Jednoduché Popis !!!!!!!!!!

Index není nic jiného než datovou strukturu, která ukládá hodnoty pro konkrétní sloupec v tabulce. Index je vytvořen na sloupci tabulky.

Máme například databázovou tabulku s názvem User se třemi sloupci - jméno, věk a adresa. Předpokládejme, že tabulka Uživatel má tisíce řádků.

Nyní řekněme, že chceme spustit dotaz najít všechny podrobnosti o všech uživatelů, kteří jsou pojmenovány ‚John‘. Budeme-li spustit následující dotaz.

SELECT * FROM User 
WHERE Name = 'John'

Databázový software doslova se podívat na každý řádek v tabulce uživatele, zda je název pro tento řádek je ‚John‘. To bude trvat dlouhou dobu.
To je místo, kde nám pomáhá index „Index slouží k urychlení vyhledávacích dotazů v podstatě kácení počet záznamů / řádků v tabulce, kterou je třeba zkoumat“.
Jak vytvořit index

CREATE INDEX name_index
ON User (Name)

Index se skládá z hodnot sloupců (např: John), z jedné tabulky, a že tyto hodnoty jsou uloženy v datové struktuře.
Takže teď bude databáze používat index najít zaměstnance jménem John, protože index bude pravděpodobně řazeny abecedně podle názvu Users. A protože to je tříděn, to znamená hledání jména je mnohem rychlejší, protože všechna jména začínající písmenem „J“ bude hned vedle sebe v indexu!

Odpovězeno 02/08/2016 v 01:30
zdroj uživatelem

hlasů
18

Jen rychlý tip .. Jak nákladů indexování vám dodatečné zápisy a úložný prostor, takže pokud vaše aplikace vyžaduje provoz více insert / aktualizací, možná budete chtít použít tabulky bez indexy, ale pokud to vyžaduje více načítání dat operace, měli byste jít na indexované stůl.

Odpovězeno 14/01/2015 v 06:44
zdroj uživatelem

hlasů
14

Jen pomyslete na databáze index jako index knihy. Máte-li knihu o psech a chcete najít informace o řekněme, němečtí ovčáci, můžete samozřejmě procházet všechny stránky knihy a najít to, co hledáte, ale to je samozřejmě časově náročné a ne příliš rychle. Další možností je, že můžete prostě jít do sekce Index knihy a najít to, co jste hledali pomocí názvu subjektu, který hledáte (v tomto případě němečtí ovčáci) a také při pohledu na číslo stránky rychle najít, co hledáte. V databázi je počet stránek je označován jako ukazatel, který směřuje k databázi na adresu uvedenou na disku, kde je umístěn subjekt. S použitím stejného německého ovčáka analogii, mohli bychom mít něco takového ( „Německý ovčák“, 0x77129), kde 0x77129 je adresa na disku, kde jsou uloženy údaje řádek pro německého ovčáka.

Stručně řečeno, index je datová struktura, která ukládá hodnoty pro konkrétní sloupec v tabulce tak, aby se urychlila vyhledávacího dotazu.

Odpovězeno 21/12/2016 v 17:16
zdroj uživatelem

hlasů
7

index SQL je něco, co souvisí s zrychlení vyhledávání v SQL databázi. Index umožňuje programátorovi k načtení dat z databáze velmi rychle. Předpokládejme, že jste student, nebo nějaký book reader. Kniha obsahuje 50.000 stran. První den si přečíst některé téma „ABC“ Druhý den si chcete přečíst nějaké další téma „xyz“. budete nikdy ručně projít stránku po stránce. Co budete dělat v této situaci je použití si index se podívat na nějaké konkrétní téma a pak skočit přímo do vašeho tématu. Index uložili spoustu času na hledání tématu. Totéž v indexu SQL, index umožňuje vyhledávat miliony záznamů velmi rychle z databáze.

Odpovězeno 15/02/2018 v 10:17
zdroj uživatelem

hlasů
2

index databáze je datová struktura, která zvyšuje rychlost načítání dat operace na databázové tabulky na úkor dalších zápisů a úložný prostor pro udržení struktury index dat. Indexy slouží k rychlému vyhledání dat, aniž by museli hledat každý řádek v tabulce databáze pokaždé, když je přístupná tabulka databáze. Indexy mohou být vytvořeny za použití jednoho nebo více sloupců tabulky databáze, které poskytují základ pro obě rychlých náhodných vyhledáváními a efektivní přístup objednaných záznamů.

Odpovězeno 09/07/2018 v 05:33
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more