Prestandaoptimering för aggregering

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

När man grupperar på kolumner i SQL server så spelar ordningen på kolumnerna i group by satsen roll. I nedanstående exekveringsplan så kan ni se en sort som uppskattningsvis står för 78% av totalkostnaden i frågan. Kostnaden för just denna fråga är blygsamma 0.01529 och det är oftast inte några problem såvida inte frågan exekveras med olika villkor av flera tusen samtidiga användare.  Om den nu inte exekveras av så många samtidigt så frågar man sig om man ska vara nöjd med denna exekveringsplan och utveckla nästa stored procedure. Ja kanske, men vad händer om datavolymerna ökar i produktion eftersom denna exekveringsplan kommer ifrån en liten utvecklings databas? Ett enkelt sätt att få bort denna sortering är att se till att kolumnerna ligger i samma ordning i group by satsen som i underliggande index. Felet i ovanstående fråga som orsakade sorteringen är att kolumnordningen inte matchar indexet som nyttjas. Genom att ändra sorteringsordningen så erhåller vi följande exekveringsplan: I denna exekveringsplan så har SORT försvunnit och största kostnaden ligger på index seek. Kostnaden för index seek har inte ökat från 22% till 98%, utan den är densamma och totalkostnaden för frågan har sjunkit till 0.003434. Den övre exekveringsplanen är då alltså 5ggr så stor, vilket innebär att den nedre frågan har bättre förutsättningar att klara en avsevärt högre datavolym. Slutsats, gör rätt från början för att undvika otrevligheter i framtiden i produktion.

/Håkan Winther