it-swarm-eu.dev

Jaké jsou rozdíly mezi klastrem a indexem bez klastrů?

Jaké jsou rozdíly mezi clustered a non-clustered index?

254
Eric Labashosky

Klastrovaný index

  • Pouze jedna tabulka
  • Rychlejší čtení než neklastrované jako data jsou fyzicky uložena v indexovém pořadí

Non Clustered Index

  • Lze použít mnohokrát na stůl
  • Rychlejší pro operace vkládání a aktualizace než klastrovaný index

Oba typy indexů zlepší výkon, když vyberete data s poli, která používají index, ale zpomalí aktualizaci a operace vkládání.

Z důvodu pomalejšího vkládání a aktualizace clusterových indexů by mělo být nastaveno pole, které je obvykle přírůstkové, tj. Id nebo časové razítko.

SQL Server bude normálně používat index pouze v případě, že jeho selektivita je vyšší než 95%.

241
Martynnw

Klastrované indexy fyzicky objednávají data na disku. To znamená, že pro index nejsou potřeba žádná další data, ale může existovat pouze jeden shlukovaný index (samozřejmě). Přístup k datům pomocí klastrovaného indexu je nejrychlejší.

Všechny ostatní indexy musí být neklastrované. Non-klastrovaný index má duplikát dat z indexovaných sloupců, které byly uspořádány společně s ukazateli na skutečné datové řádky (ukazatele na clusterovaný index, pokud existuje). To znamená, že přístup k datům přes index bez klastrů musí projít další vrstvou indirection. Pokud však vyberete pouze data, která jsou k dispozici v indexovaných sloupcích, můžete data získat přímo z duplikovaných dat indexu (proto je vhodné vybrat pouze sloupce, které potřebujete a nepoužívejte *)

69
rslite

Klastrované indexy jsou fyzicky uloženy v tabulce. To znamená, že jsou nejrychlejší a na jednu tabulku můžete mít pouze jeden clusterovaný index. 

Non-clusterové indexy jsou ukládány odděleně a můžete mít tolik, kolik chcete.

Nejlepší možností je nastavit indexovaný cluster na nejpoužívanější jedinečný sloupec, obvykle PK. Měli byste mít vždy ve svých tabulkách dobře zvolený klastrovaný index, pokud není příliš přesvědčivý důvod - nemůžete myslet na jeden, ale hej, může to být venku - protože to tak není.

31
Santiago Cepas

Klastrovaný index

  1. Pro tabulku může být pouze jeden shlukovaný index.
  2. Obvykle se provádí na primárním klíči.
  3. Listové uzly clusterového indexu obsahují datové stránky.

Non-Clustered Index

  1. Pro tabulku může být pouze 249 neklastrových indexů (až do verze sql 2005 novější verze podporují až 999 neklastrových indexů).
  2. Obvykle se provádí na libovolném klíči.
  3. Listový uzel nonclustered indexu se neskládá z datových stránek. Místo toho obsahují uzly listů řádky indexu.
25
Jojo

Klastrovaný index

  • V tabulce může být pouze jeden shlukovaný index
  • Seřadit záznamy a uložit je fyzicky podle objednávky
  • Načítání dat je rychlejší než indexy bez clusterů
  • Nepotřebujete další prostor pro uložení logické struktury

Non Clustered Index

  • V tabulce může být libovolný počet neklastrových indexů
  • Nedotýkají se fyzického pořadí. Vytvořte logické pořadí pro datové řádky a použijte ukazatele na fyzické datové soubory
  • Vkládání/aktualizace dat je rychlejší než indexovaný index
  • Pro uložení logické struktury použijte více místa

Kromě těchto rozdílů musíte vědět, že když je tabulka neklastrovaná (když tabulka nemá klastrovaný index), datové soubory jsou neuspořádané a jako datovou strukturu používá datovou strukturu Heap.

20
Lasitha Yapa

Klastr v podstatě znamená, že data jsou v takovém fonickém pořadí v tabulce. To je důvod, proč můžete mít pouze jednu tabulku.

Unclustered znamená, že je to "pouze" logické pořadí.

8
Biri

Klady:

Klastrové indexy fungují skvěle pro rozsahy (např. Vyberte * z my_table, kde my_key mezi @min a @max)

V některých podmínkách DBMS nebude muset pracovat na řazení, pokud použijete příkaz orderby.

Nevýhody:

Klastrované indexy mohou zpomalit vkládání, protože fyzické rozvržení záznamů musí být upraveno, když jsou nové klíče vloženy, pokud nejsou nové klíče v pořadovém pořadí.

6
Giovanni Galbo

Klastrovaný index ve skutečnosti popisuje pořadí, ve kterém jsou záznamy fyzicky uloženy na disku, proto je důvod, proč je můžete mít pouze jeden.

Index bez clusteru definuje logické pořadí, které neodpovídá fyzickému pořadí na disku.

5
Josh

Klastrovaný index je v podstatě tříděná kopie dat v indexovaných sloupcích.

Hlavní výhodou klastrovaného indexu je to, že když váš dotaz (hledat) vyhledá data v indexu, není pro načtení těchto dat potřeba žádné další IO.

Režijní náklady spojené s udržováním klastrovaného indexu, zejména v často aktualizované tabulce, mohou vést ke špatnému výkonu, a proto může být vhodnější vytvořit index bez clusterů.

5
Ed Guiness

Indexovaná databáze má dvě části: sadu fyzických záznamů, které jsou uspořádány v nějakém libovolném pořadí, a sadu indexů, které identifikují posloupnost, ve které mají být záznamy čteny, aby se získal výsledek seřazený podle určitého kritéria. Pokud neexistuje žádná korelace mezi fyzickým uspořádáním a indexem, pak čtení všech záznamů v pořadí může vyžadovat provedení několika samostatných operací čtení jednoho záznamu. Vzhledem k tomu, že databáze může být schopna číst desítky po sobě jdoucích záznamů v kratším čase, než by bylo zapotřebí ke čtení dvou nepřetržitých záznamů, výkon může být zlepšen, pokud jsou záznamy, které jsou v indexu po sobě jdoucí, také uloženy na disku. Určení, že index je seskupen, způsobí, že databáze provede určité úsilí (různé databáze se liší podle toho, kolik) uspořádat věci tak, aby skupiny záznamů, které jsou v indexu po sobě následující, byly na disku následovně.

Například, jestliže jeden měl začít s prázdnou non-shluková databáze a přidat 10,000 záznamů v náhodném pořadí, záznamy by pravděpodobně byly přidány na konci v pořadí, v jakém byly přidány. Čtení databáze v pořadí podle indexu by vyžadovalo 10 000 čtení jednoho záznamu. Pokud by se jednalo o použití klastrové databáze, systém by mohl při přidávání každého záznamu zkontrolovat, zda byl předchozí záznam uložen sám; pokud zjistí, že je tomu tak, může zapsat tento záznam s novým na konci databáze. To by pak mohlo podívat se na fyzický záznam před sloty, kde se pohyboval záznamy slouží k pobytu a zjistit, zda záznam, který následoval, který byl uložen sám. Pokud zjistí, že tomu tak je, může tento záznam přesunout na toto místo. Použití tohoto typu přístupu by způsobilo, že mnoho záznamů bude seskupeno ve dvojicích, což by potenciálně téměř zdvojnásobilo sekvenční rychlost čtení.

Ve skutečnosti klastrové databáze používají sofistikovanější algoritmy než toto. Klíčovou věcí, kterou je třeba poznamenat, je to, že mezi časem potřebným k aktualizaci databáze a časem potřebným k jejímu přečtení je kompromis. Údržba klastrové databáze významně zvýší množství práce potřebné k přidání, odebrání nebo aktualizaci záznamů jakýmkoli způsobem, který by ovlivnil pořadí řazení. Pokud bude databáze čtena postupně mnohem častěji, než bude aktualizována, může být klastrování velkou výhrou. Pokud se bude často aktualizovat, ale zřídka se bude číst postupně, může být klastrování velkým výkonovým odtokem, zejména pokud posloupnost, do které jsou položky přidávány do databáze, je nezávislá na jejich pořadí řazení s ohledem na seskupený index.

5
supercat

Možná jste prošli teoretickou částí z výše uvedených příspěvků:

-Klastrovaný index, jak vidíme body přímo k záznamu, tj. Jeho přímé, takže hledání trvá méně času. Navíc neuloží další paměť/místo pro uložení indexu

-While, v non-klastrovaný index, to nepřímo ukazuje na klastrovaný index pak to bude přistupovat k aktuálnímu záznamu, kvůli jeho nepřímé povaze to bude trvat nějaký co více času k přístupu. Také to potřebuje jeho vlastní paměť/prostor k uložit index

 enter image description here

0
Nandkishor Nangre

// Zkopírován z MSDN, druhý bod non-clustered index není jasně uvedeno v ostatních odpovědích. 

Clustery

  • Klastrované indexy třídí a ukládají datové řádky do tabulky nebo zobrazení Na základě jejich klíčových hodnot. Toto jsou sloupce zahrnuté v definici indexu . Pro každou tabulku může být pouze jeden shlukovaný index, , Protože samotné datové řádky mohou být uloženy pouze v jednom pořadí.
  • Jediný čas, kdy jsou datové řádky v tabulce uloženy v tříděném pořadí, je , Když tabulka obsahuje indexovaný index. Má-li tabulka indexovaný index , Tabulka se nazývá clusterová tabulka. Pokud tabulka Nemá žádný klastrovaný index, jeho datové řádky jsou uloženy v neuspořádané struktuře Nazvané halda.

Nonclustered

  • Nonclustered indexy mají strukturu oddělenou od datových řádků. Nonclustered index obsahuje hodnoty klíčů indexu neclusterů a
    Každá položka hodnoty klíče má ukazatel na řádek dat, který obsahuje hodnotu klíče .
  • Ukazatel z řádku indexu v indexu nonclustered na datový řádek Se nazývá lokátor řádku. Struktura lokátoru řádku závisí na tom, zda jsou datové stránky uloženy v haldě nebo v clusterové tabulce. Pro haldu je lokátor řádku ukazatelem na řádek. Pro tabulku V clusteru je lokátor řádků klastrovaný indexový klíč.
0
Deepak Mishra