Index Hint – With ( Index ( 0 ) )

Oopps! Upgrade your browser pretty please. Oopps! Upgrade your browser pretty please.

 

En möjlighet som man har när man skriver SQL kod är att ange sk index hints. Att man använder dessa är inte alltför vanligt, men det förekomer ibland. När man gör detta så måste man ha klart för sig att detta i framtiden kanske inte var så smart. Datavolymerna växer,  innehållet i tabellerna förändras, nya index tillkommer osv. Ett av de sämre sätten är att ange WITH ( INDEX ( 0 ) ) som innebär att det alltid blir en scan av tabellen eller det det klustrade index’et och detta kan vara riktigt dåligt som vi ser nedan.

Om vi kör denna fråga :

USE [AdventureWorks2012];

SELECT  [BusinessEntityID] ,
        [LastName]
FROM    [AdventureWorks2012].[Person].[Person] WITH ( INDEX ( 0 ) )
WHERE   [BusinessEntityID] = 1;

 

Detta ger denna statistik för en enda rad som resultat av frågan:

 

Om man däremot kör samma fråga utan att peka ut något index …

SELECT  [BusinessEntityID] ,
        [LastName]
FROM    [AdventureWorks2012].[Person].[Person] 
WHERE   [BusinessEntityID] = 1;

  

. så blir det helt annan statistik:

 

 

Exekveringsplanerna för dessa frågor visar också vilken skillnad det är på dem och från verkligheten kan man ske skillnader när det gäller svarstider på t.ex millisekunder jämfört med minuter.