Jag försökte några SELECT COUNT(*) FROM MyTable
kontra SELECT COUNT(SomeColumn) FROM MyTable
med olika storlekar på tabeller och där SomeColumn
en gång är en klustringsnyckelkolumn, en gång är den i ett icke-klustrad index och en gång finns det inget index alls.
I alla fall, med alla storlekar på tabeller (från 300 000 rader till 170 miljoner rader), ser jag aldrig någon skillnad i termer av antingen hastighet eller utförandeplan - i alla fall, COUNT
hanteras genom att göra en klustrad indexskanning --> d.v.s. skanna hela tabellen, i princip. Om det finns ett icke-klustrat index inblandat, är skanningen på det indexet - även när du gör en SELECT COUNT(*)
!
Det verkar inte vara någon skillnad vad gäller hastighet eller tillvägagångssätt hur dessa saker räknas - för att räkna dem alla behöver SQL Server bara skanna hela tabellen - punkt.
Tester gjordes på SQL Server 2008 R2 Developer Edition