Wypróbowałem kilka SELECT COUNT(*) FROM MyTable a SELECT COUNT(SomeColumn) FROM MyTable z różnymi rozmiarami tabel i gdzie SomeColumn raz jest kolumną klucza klastrowego, raz znajduje się w indeksie nieklastrowym, a raz w ogóle nie ma indeksu.
We wszystkich przypadkach, przy wszystkich rozmiarach tabel (od 300 000 wierszy do 170 milionów wierszy), nigdy nie widzę żadnej różnicy zarówno pod względem szybkości, jak i planu wykonania - we wszystkich przypadkach COUNT jest obsługiwany przez wykonanie klastrowego skanowania indeksu --> tj. zasadniczo skanowanie całej tabeli. Jeśli w grę wchodzi indeks nieklastrowy, skanowanie odbywa się na tym indeksie — nawet podczas wykonywania SELECT COUNT(*) !
Wydaje się, że nie ma żadnej różnicy pod względem szybkości lub podejścia, w jaki sposób te rzeczy są liczone – aby je policzyć, SQL Server musi po prostu przeskanować całą tabelę – kropka.
Testy przeprowadzono na SQL Server 2008 R2 Developer Edition