sql >> Databáze >  >> RDS >> Sqlserver

Jak se rozhodnout, kdy použít index na sloupec tabulky

Obecně by moje strategie indexování byla asi tato (prozatím používám výhradně SQL Server - podle potřeby se přizpůsobte vlastnímu databázovému systému):

  • vybrat dobré klastrovací klíč – ne GUID, ne VARCHAR(250) nebo něco – dobré klíč clusteringu je úzký, jedinečný, stabilní, neustále se zvyšující - něco jako INT IDENTITY je perfektní. Udělá to váš primární klíč v clusteru -> vám poskytne váš první index v tabulce

  • pro každý sloupec, který se používá jako cizí klíč do jiné tabulky - přidejte index. Může to být buď index s jedním sloupcem - nebo to může být složený index - podle toho, co je pro váš případ nejvhodnější. Je důležité, aby byl sloupec cizího klíče první sloupec v tomto indexu (pokud používáte složený index) – jinak výhody pro JOIN 's nebo pro kontrolu referenční integrity nebudou pro váš systém dostupné

A to je pro tuto chvíli vše.

Poté:spusťte svůj systém - pozorujte a měřte - stanovte základní linii. Je aplikace dostatečně rychlá? Pokud ano -> jste hotovi - jděte domů a užijte si svůj volný čas.

Pokud ne:začněte shromažďovat data a indikace, proč aplikace není dostatečně rychlá. Podívejte se např. věci jako DMV v SQL Server, které vám říkají o dotazech s nejhorším výkonem, nebo chybějící index DMV . Analyzujte je. Podívejte se, co byste mohli zlepšit. Přidávejte podle jednoho indexu a znovu:pozorujte, měřte a porovnejte se svou základní linií.

Pokud máte zlepšení -> ponechte tento index na místě a toto měření je vaší novou základní linií. Opláchněte a opakujte, dokud nebudete vy (a vaši uživatelé) s výkonem aplikace spokojeni (a pak jít domů a užít si volno).

Nadměrné indexování na serveru SQL Server může být horší než nemít žádné indexy. Nezačínejte s příliš mnoha indexy pro začátek! Nastavit pouze dobré clusterovaný PK a cizí klíč neshlukované indexy – to je vše – pak tento cyklus pozorujte, měřte, optimalizujte a opakujte.



  1. Proč existují rozdíly ve výkonu, když je funkce SQL volána z aplikace .Net a když je stejné volání provedeno v Management Studio

  2. Zálohujte PostgreSQL pomocí pg_dump a pg_dumpall

  3. Výhoda výkonu MySQL Enum?

  4. Jak získat odlišný záznam z tabulky mysql?