Varför ska jag skapa ett index ?

Varför ska jag skapa ett index?

Det finns många fall där databasadministratör kontrolleras inte frågor lämnas in av systemet. Som ett resultat är fysisk databasdesign ofta inte inställd så bra som det kunde vara. I ett antal verkliga kund fall där vi undersökte prestandaproblem med dem har vi funnit att detta ofta kan vara ett effektivt sätt att förbättra prestanda.
 
Några anledningar index är användbara i ett implementerat system:
1.Till före realiseras en sorts över data
2.Till möjliggöra singleton uppslagningar (söker) för särskilda värden
3.Till minska låsning krav som orsakas av scans
4.Till minska minne orsakade av hash går

De två första är mer allmänt förstås fördelar. Du kan undvika ett slags i din plan med 1. och du kan undvika skanningar med 2. Så länge uppdateringen kostnaden för att upprätthålla dessa index är godtagbar, då du kan förbättra urvalsfrågan prestanda med ett index.
 
Den tredje frågan, låsning, är ett problem i många tillämpningar om vilka det egentligen inte finns mycket skrivet. Vissa program är “bundna” på hur många lås de tar. Ett exempel kan vara en fakturering ansökan med ett antal små frågor som tillgång individ (eller ett litet antal) rader men har många, många sådana förfrågningar samtidigt. Om frågan planerna valt är alla syftar då delad eller exklusiv lås kan endast fattas på raderna för att specifikt nås / förändrats i frågeresultatet. Men om man planerar förändringar som skall en genomsökning i stället för en sökning, kommer antalet slussar öka dramatiskt. Dessa lås kan också hållas längre (beroende på isolering nivå), eftersom frågan kan vara igång längre också. Ett index kan förbättra prestanda för en sådan ansökan, eftersom det förbättrar övergripande fråga genomströmning för många samtidiga användare.
 
Minne påstående är en annan genomströmning-relaterade problem som kan orsaka problem när ett program körs med många samtidiga anslutningar. I SQL Server, frågor reservera minne för hela sin avrättning. Detta förhindrar att vissa frågor från att inte på en minnesallokering när de har slutfört endast en del av frågan. Om systemet inte har några mer minne att ge, ännu-inte-startade frågor kommer att blockeras och vänta på tidigare frågor för att slutföra (och släppa deras minne reservationer). I vissa applikationer, är systemets totala genomströmningen begränsas av tillgängligt minne som krävs för att möjliggöra trafik som hash går.
 
Minne påstående är sannolikt ett problem för skalad program som körs på 32-bitars maskinvara som använder mycket minne på toppbelastning. Medan Microsoft Windows har en mekanism som kallas AWE som gör att en process för att använda mer än den normala maximalt minne (vanligen 2 GB), den mekanismen bara är verkligen användbart för att lagra sidor från databasen i minnet. Internt minne konsumenter, såsom Query Optimizer och Query Execution, är begränsade till minne i den virtuella adressrymden (vanligen 2 GB minus det som används för databasen sidbufferten pool och andra interna cachar / minne konsumenter). Detta kan begränsa system som har få index men många frågor som kräver ansluter sig utan stöd index eftersom en hash gå är ofta ett bra val för Optimizer. Dessutom gör plocka optimeringsfunktionen inte olika plan former baserat på belastningen på systemet i SQL Server 2005.

Så kan skapa ett index leda till att systemet plocka slingor ansluter sig eller slå ihop ansluter sig i fall där hash går skulle plockas annars. Skapa ett index eller två på ett sådant system kan minska minne påstående och förbättra systemets totala kapacitet.
 
SQL Server har länge levereras ett program för att hjälpa till med fysisk databasdesign kallas Index Tuning Wizard (och nu databasoptimera Advisor i SQL Server 2005). Detta kan hjälpa att hitta en någorlunda optimal index som fastställts för en uppsättning frågor. Det fungerar genom att köra Optimizer med en serie av “tänk om” scenarier och utvärdera kostnaden för planen optimeraren plockade i varje fall. Det skäl som sedan om den bästa uppsättning index för att matcha arbetsbördan.
 
Det finns också en nyare mekanism som du kan använda i SQL Server 2005 som komplimanger den befintliga databasen Tuning Advisor. Det kräver inte att du på förhand identifiera en arbetsbelastning, och det är integrerat i motorn och går som en del av den ordinarie driften av servern (du behöver inte köra något). Det gör inte så mycket arbete som den DTA, men den kan hitta den vanliga problem som orsakar stora prestandaproblem i utplaceras system. Utvecklingen Teamet använde detta för att felsöka ett antal kundapplikationer och fann att det gjorde identifiera “bättre” index i ett antal fall. Om du har att felsöka ett levande system där fysisk databasdesign inte är känd för att vara nära optimala, kan detta vara ett användbart verktyg för att förbättra systemets prestanda.
 
De särskilda uppgifter om DMVs dokumenteras här:

http://msdn2.microsoft.com/en-US/library/ms345434(SQL.90).aspx

http://msdn2.microsoft.com/en-US/library/ms345407(SQL.90).aspx

http://msdn2.microsoft.com/en-us/library/ms345421(SQL.90).aspx

Jag hoppas att detta ger dig tillräckligt med information för att experimentera med detta.

Advertisements
%d bloggers like this: