Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy SELECT COUNT(kolumna) jest szybszy/wolniejszy niż SELECT COUNT(*)?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co SqlDbType mapuje na varBinary(max)?

  2. Badanie opcji oczekiwania na blokadę o niskim priorytecie w programie SQL Server 2014 CTP1

  3. Przywróć kopię zapasową SQL Server 2000 na SQL Server 2012

  4. Kopiuj w modelu sąsiedztwa

  5. SQL Server:użyj parametru w CREATE DATABASE