Jeg prøvede et par SELECT COUNT(*) FROM MyTable
vs. SELECT COUNT(SomeColumn) FROM MyTable
med forskellige størrelser af tabeller, og hvor SomeColumn
én gang er en klyngenøglekolonne, én gang er den i et ikke-klynget indeks, og én gang er den slet ikke i noget indeks.
I alle tilfælde, med alle størrelser af tabeller (fra 300.000 rækker til 170 millioner rækker), ser jeg aldrig nogen forskel i form af enten hastighed eller udførelsesplan - i alle tilfælde COUNT
håndteres ved at lave en clustered index scan --> dvs. at scanne hele tabellen, dybest set. Hvis der er et ikke-klynget indeks involveret, er scanningen på det indeks - selv når du laver en SELECT COUNT(*)
!
Der ser ikke ud til at være nogen forskel med hensyn til hastighed eller tilgang, hvordan disse ting tælles - for at tælle dem alle, skal SQL Server bare scanne hele tabellen - punktum.
Tests blev udført på SQL Server 2008 R2 Developer Edition