Jaký je přesně rozdíl mezi primárním a sekundárním indexem? A jaká je výhoda jednoho oproti druhému?


Odpověď 1:

Nejdříve řeknu podobnostem:

Podobnosti

  • Obě indexové struktury jsou implementovány jako samostatné prvotřídní objekty v databázi. To znamená, že tabulka a její odpovídající index (primární nebo sekundární) existují jako dvě oddělené struktury. Díky implementaci úrovně indirection kde dotazy nejprve vyhledají index, a výsledek tohoto vyhledávání použije k přímému načtení záznamu, na který ukazuje. Bloky indexu v obou typech indexů udržují záznamy seřazené; tj. ať už je skutečná položka rejstříku → a , položky v indexovém bloku jsou vždy seřazeny v indexovém / vyhledávacím klíči.

Rozdíly

Primární index

  • Primární index ovlivňuje ukládání a organizaci řádků v datových blocích. Datové bloky jsou diskové bloky, které ukládají skutečná data řádků (více sloupců). Primární index vyžaduje, aby byly řádky v datových blocích uspořádány na klíč indexu. Kromě toho, že položky indexu jsou samy tříděny v indexovém bloku, také vynucuje primární index. řazení řádků v datových blocích. Níže uvedený diagram vypůjčený z “Implementace databázového systému Garcíou Molinou a kol.” ukazuje, jak položky rejstříku v indexových blocích (vlevo) obsahují ukazatele (jedná se o lokátory řádků v terminologii databáze) na odpovídající řádky v datových blocích (pravá strana). Každý datový blok má řádky seřazené podle indexového klíče.
  • Primární index lze vytvořit ve sloupcích s klíčem i bez klíče. Neexistuje nic takového, protože primární index je určen pouze pro primární klíč. Ale ano, obvykle se vytváří na primárním klíči tabulky. Protože primární index mění způsob, jakým je třeba data uspořádat (musí být řádky seřazeny), může být v dané tabulce maximálně 1 primární index.

Sekundární index

  • Sekundární index nemá žádný vliv na to, jak jsou řádky skutečně uspořádány v datových blocích. Mohou být v libovolném pořadí. Jediným uspořádáním je klíč indexu v indexových blocích. Níže uvedený diagram vypůjčený z “Implementace databázového systému Garcíou Molinou a kol.” Ukazuje, jak položky indexu v indexových blocích (vlevo) obsahují ukazatele (jedná se o lokátory řádků v terminologii databáze). ) na odpovídající řádky v datových blocích (pravá strana). Datové bloky nemají řádky seřazené v indexovém klíči

Srovnání

  • Za prvé, uživatel může definovat více sekundárních indexů, protože nemají žádný dopad na organizaci řádků v tabulce. Může však existovat pouze 1 primární index. Protože primární index nemusí být nutně na primárním klíči, může mít primární index také duplicitní indexové klíče. Ve skutečnosti je výše uvedený příklad sekundárního indexu použit pro duplicitní klíče. To je společné pro obě strany. Samozřejmě, pokud je primární index vytvořen na primárním klíči, pak nemohou existovat duplicitní klíče indexu, protože primární klíč vynucuje UNIKÁTNÍ KONTRAINT. Primární a sekundární indexy lze použít pro vyhledávání bodů a dotazy na rozsahy. Očekává se však, že dotazy na rozsahy budou pro primární index rychlejší v obou případech - jedinečný indexový klíč a duplicitní indexové klíče. Očekává se, že vyhledávání bodů v případě NON UNIQUE indexu bude rychlejší s primárním indexem. Je-li však index UNIQUE, vyhledávání bodů s primárním a sekundárním indexem by mělo ideálně trvat stejné množství času - alespoň stejné množství I / O. Důvodem je, že primární index nutí řádky v datových blocích, aby byly uspořádány. Takže pokud má uživatel zájem najít řádky pro KDE KEY> = 20 A KEY <= 40, existuje velká šance na čtení méně diskových bloků, a tedy i méně I / O. Je možné, že řádky odpovídající těmto klíčům jsou ve stejném datovém bloku (i když index není jedinečný). Na druhé straně nemá sekundární index žádnou kontrolu nad organizací řádků. Pro stejný příklad nalezení všech záznamů mezi 20 a 40 je tedy možné, že záznamy odpovídající každému klíči sedí ve svém vlastním datovém bloku. To zjevně znamená, že bude více I / O, a tak dotazy mohou být méně efektivní se sekundárním indexem. Pro vyhledávání bodů s jedinečnými indexovými klíči nezáleží, zda je index primární nebo sekundární. Výsledkem vyhledávání bude lokátor řádků a databáze musí každopádně následovat, aby se dostala do skutečného záznamu. Bude tedy existovat jediný I / O. Protože primární index vynutí řádky, které mají být uspořádány v datových blocích, budou DML méně účinné. Protože DML musí udržovat řádky v seřazeném pořadí v datovém bloku, INSERT / UPDATE způsobí častý pohyb řádků, pokud se uživatel nestará o to, aby se vložení provádělo v sekvenčním pořadí. blok bude také vyžadovat aktualizaci odpovídající primární struktury indexu od vstupu do indexu Nyní je třeba aktualizovat nový lokátor řádků (protože byl řádek přesunut) .Row pohyb bude vyžadovat aktualizaci také na strukturu sekundárního indexu, ale pravděpodobnost, že INSERT způsobí pohyb řádku, je pro sekundární index relativně nízká, protože INSERT ano nemusíte udržovat řádky v seřazeném pořadí v rámci datového bloku. Případy, jako je velikost řádků, a proto je třeba je přesunout do všech dohromady, jiný blok jsou jedním z mála případů pohybu řádků v sekundárním indexu.

Odpověď 2:

Primární index je struktura úložiště obsahující skutečné základní řádky tabulky v rozvržení úložiště založeném na B-stromu. Obvykle je index organizován kolem PRIMÁRNÍHO Klíče, pokud je k dispozici.

Primární indexy se někdy nazývají „seskupené indexy“, i když ne všechny věci nazývané seskupené indexy jsou „skutečnými“ implementacemi primárních indexů (tj. Ta v PostgreSQL není).

Drtivá většina paměťových modulů ukládá řádky základních tabulek bez zvláštního pořadí odvozeného z dat sloupců a neimplementuje „skutečné“ primární indexy.

Primární indexy skutečně implementují pouze několik databázových modulů úložiště. Oracle „Index Organized Tables“ a MySQL InnoDB jsou nejpoužívanější úložné stroje, které implementují primární indexy.

Největší výhodou indexově uspořádané struktury úložiště je vyhledávání v PRIMARY KEY vyžadující jednu „procházku“ základního stromu B. Ve většině ostatních uspořádání úložiště vyžadují vyhledávání PRIMARY KEY dvě procházky: jedna pro vyhledání ukazatele řádku základní tabulky ve sekundární indexové struktuře vytvořené kolem PK a samotné načtení řádku.

V těchto uspořádáních nejsou vyhledávání PK levnější než vyhledávání používající jakýkoli jiný index.

Protože se pro organizaci základní tabulky používá primární index, dostanete pouze jednu pro každou tabulku.

Největší nevýhodou ukládání primárního indexu oproti jiným typům úložiště je, že se mohou načítat pomaleji, protože každý INSERT na základní tabulce musí projít B-strom a zjistit, kam umístit řádek. Protože většina úložných modulů, které podporují primární indexy, používá primární klíč indexu jako identifikátor vyhledávání sekundárních indexů, můžete mít sekundární indexy, které zabírají mnoho místa, pokud máte dlouhý PRIMÁRNÍ KLÁVES (tj. Pokud používáte něco jako Globálně jedinečný identifikátor jako PK a mají jiné indexy).


Odpověď 3:

Primární index je struktura úložiště obsahující skutečné základní řádky tabulky v rozvržení úložiště založeném na B-stromu. Obvykle je index organizován kolem PRIMÁRNÍHO Klíče, pokud je k dispozici.

Primární indexy se někdy nazývají „seskupené indexy“, i když ne všechny věci nazývané seskupené indexy jsou „skutečnými“ implementacemi primárních indexů (tj. Ta v PostgreSQL není).

Drtivá většina paměťových modulů ukládá řádky základních tabulek bez zvláštního pořadí odvozeného z dat sloupců a neimplementuje „skutečné“ primární indexy.

Primární indexy skutečně implementují pouze několik databázových modulů úložiště. Oracle „Index Organized Tables“ a MySQL InnoDB jsou nejpoužívanější úložné stroje, které implementují primární indexy.

Největší výhodou indexově uspořádané struktury úložiště je vyhledávání v PRIMARY KEY vyžadující jednu „procházku“ základního stromu B. Ve většině ostatních uspořádání úložiště vyžadují vyhledávání PRIMARY KEY dvě procházky: jedna pro vyhledání ukazatele řádku základní tabulky ve sekundární indexové struktuře vytvořené kolem PK a samotné načtení řádku.

V těchto uspořádáních nejsou vyhledávání PK levnější než vyhledávání používající jakýkoli jiný index.

Protože se pro organizaci základní tabulky používá primární index, dostanete pouze jednu pro každou tabulku.

Největší nevýhodou ukládání primárního indexu oproti jiným typům úložiště je, že se mohou načítat pomaleji, protože každý INSERT na základní tabulce musí projít B-strom a zjistit, kam umístit řádek. Protože většina úložných modulů, které podporují primární indexy, používá primární klíč indexu jako identifikátor vyhledávání sekundárních indexů, můžete mít sekundární indexy, které zabírají mnoho místa, pokud máte dlouhý PRIMÁRNÍ KLÁVES (tj. Pokud používáte něco jako Globálně jedinečný identifikátor jako PK a mají jiné indexy).


Odpověď 4:

Primární index je struktura úložiště obsahující skutečné základní řádky tabulky v rozvržení úložiště založeném na B-stromu. Obvykle je index organizován kolem PRIMÁRNÍHO Klíče, pokud je k dispozici.

Primární indexy se někdy nazývají „seskupené indexy“, i když ne všechny věci nazývané seskupené indexy jsou „skutečnými“ implementacemi primárních indexů (tj. Ta v PostgreSQL není).

Drtivá většina paměťových modulů ukládá řádky základních tabulek bez zvláštního pořadí odvozeného z dat sloupců a neimplementuje „skutečné“ primární indexy.

Primární indexy skutečně implementují pouze několik databázových modulů úložiště. Oracle „Index Organized Tables“ a MySQL InnoDB jsou nejpoužívanější úložné stroje, které implementují primární indexy.

Největší výhodou indexově uspořádané struktury úložiště je vyhledávání v PRIMARY KEY vyžadující jednu „procházku“ základního stromu B. Ve většině ostatních uspořádání úložiště vyžadují vyhledávání PRIMARY KEY dvě procházky: jedna pro vyhledání ukazatele řádku základní tabulky ve sekundární indexové struktuře vytvořené kolem PK a samotné načtení řádku.

V těchto uspořádáních nejsou vyhledávání PK levnější než vyhledávání používající jakýkoli jiný index.

Protože se pro organizaci základní tabulky používá primární index, dostanete pouze jednu pro každou tabulku.

Největší nevýhodou ukládání primárního indexu oproti jiným typům úložiště je, že se mohou načítat pomaleji, protože každý INSERT na základní tabulce musí projít B-strom a zjistit, kam umístit řádek. Protože většina úložných modulů, které podporují primární indexy, používá primární klíč indexu jako identifikátor vyhledávání sekundárních indexů, můžete mít sekundární indexy, které zabírají mnoho místa, pokud máte dlouhý PRIMÁRNÍ KLÁVES (tj. Pokud používáte něco jako Globálně jedinečný identifikátor jako PK a mají jiné indexy).