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

Count(*) vs Count(1) — SQL Server

Nie ma różnicy.

Powód:

Książki on-line mówią „COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } ) "

„1” jest wyrażeniem innym niż null:jest więc tym samym co COUNT(*) .Optymalizator rozpoznaje to, czym jest:trywialne.

To samo co EXISTS (SELECT * ... lub EXISTS (SELECT 1 ...

Przykład:

SELECT COUNT(1) FROM dbo.tab800krows
SELECT COUNT(1),FKID FROM dbo.tab800krows GROUP BY FKID

SELECT COUNT(*) FROM dbo.tab800krows
SELECT COUNT(*),FKID FROM dbo.tab800krows GROUP BY FKID

To samo IO, ten sam plan, prace

Edycja, sierpień 2011

Podobne pytanie na DBA.SE.

Edycja, grudzień 2011

COUNT(*) jest wymieniony konkretnie w ANSI-92 (poszukaj "Scalar expressions 125 ")

Sprawa:

a) Jeśli określono COUNT(*), wynikiem jest liczność T.

Oznacza to, że standard ANSI rozpoznaje to jako krwawiące oczywiste, co masz na myśli. COUNT(1) został zoptymalizowany przez dostawców RDBMS ponieważ tego przesądu. W przeciwnym razie zostanie to ocenione zgodnie z ANSI

b) W przeciwnym razie niech TX będzie tabelą jednokolumnową, która jest wynikiem zastosowania do każdego wiersza Tand eliminującego wartości null. Jeśli jedna lub więcej wartości null zostanie wyeliminowanych, wywoływany jest warunek ukończenia:ostrzeżenie-



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę wykryć, że tworzenie, aktualizacja, usuwanie zakończyło się powodzeniem w Codeigniter?

  2. Czy istnieje funkcja Max w SQL Server, która przyjmuje dwie wartości, takie jak Math.Max ​​w .NET?

  3. Konfigurowanie grup dostępności AlwaysOn na serwerze SQL Server

  4. Konwertuj „datetimeoffset” na „datetime” w SQL Server (przykłady T-SQL)

  5. Wyszukiwanie pełnotekstowe nie działa, jeśli dołączono słowo zatrzymania, mimo że lista słów zatrzymania jest pusta