Friday, April 20, 2007

Optimering utav SQL server. Index

Att skapa och identifiera nödvändiga index
När man skall se över indexen i en datatbas så fokusera i förstahand på tabeller med mycket data och som används frekvent. Dom andra spelar inte så stor roll. För att kunna optimera indexen så skall man vara medveten om hur databasen används och vilka frågor som är vanligast annars blir det svårt att göra något. Nedan följer ett antal punkter man skall ha i åtanke vid indexoptimering.

Överväg att Indexera alla kolumner där klausulerna WHERE, ORDER BY, GROUP BY, TOP och DISTINCT används ofta.

Ta bort index som inte används utav Queryoptimizern. Indexen tar bara onödig plats och prestandard om dom inte används.

Vilken fyllnadsgrad skall indexen ha. Är det bara läsning som sker mot tabellen så är en full fyllnadsgrad att föredra (Pading index) medan en tabell som det skrivs mycket till kanske skall ligga på 50%.

Som en tumregel så bör alla tabeller ha ett Clustrat Index. Generellt sett, men inte alltid, så ska det Clustrade Indexet finnas på en kolumn vars värden ökar monotont, såsom t ex identitetskolumner eller kolumner vars värden ökar – och är unika. I många fall så är primärnyckeln en ideal kolumn för Clustrade Index.

Returneras bara ett värde från tabellen så är det bättre med ett icke clustrat index.

Kolumner utav typen image, text skall inte ha några index.

Om man har två eller fler tabeller som JOINas ihop väldigt ofta, så bör de kolumner som används för JOINerna ha de korrekta Indexen.

Om möjligt se till att göra indexen unika, när databasmotorn hitta värdet behöver den inte fortsätta att söka igenom hela indexet för den vet att det bara finns ett unikt värde.

Index skall skapas på så smala kolumner som möjligt.

Ett index är ge bättre resultat på en kolumn med numeriska värden än tecken.

Index kan påverka olika operationer både positivt och negativt. Tex en query som gör en select går mycket bättre när man lägger till ett clustrat index. Men om samma tabell kanske fylls med data vid ett tillfälle per dygn och det då görs en massa inserts så kan samma index påverka denna operation mycket negativt. Vid detta tillfälle kan man låta droppa indexet före operationen för att sedan skapa det igen efteråt.

No comments: