sql >> Database teknologi >  >> RDS >> Sqlserver

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

Der er ingen forskel.

Årsag:

Bøger online siger "COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } ) "

"1" er et ikke-nul udtryk:så det er det samme som COUNT(*) .Optimeringsværktøjet genkender det for, hvad det er:trivielt.

Det samme som EXISTS (SELECT * ...). eller EXISTS (SELECT 1 ...).

Eksempel:

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

Samme IO, samme plan, værkerne

Rediger, august 2011

Lignende spørgsmål på DBA.SE.

Rediger, dec 2011

COUNT(*) er nævnt specifikt i ANSI-92 (se efter "Scalar expressions 125 ")

Sag:

a) Hvis COUNT(*) er angivet, så er resultatet kardinaliteten af ​​T.

Det vil sige, at ANSI-standarden anerkender det som blødende indlysende, hvad du mener. COUNT(1) er blevet optimeret af RDBMS-leverandører fordi af denne overtro. Ellers ville det blive evalueret i henhold til ANSI

b) Ellers lad TX være den enkelt-kolonne tabel, der er resultatet af at anvende på hver række af Tand, hvilket eliminerer nulværdier. Hvis en eller flere nulværdier elimineres, opstår der en fuldførelsesbetingelse:advarsel-



  1. MariaDB introducerer en JSON_TABLE() funktion

  2. En datamodel for kæledyrspleje

  3. Vælge værdier, der opfylder forskellige betingelser på forskellige rækker?

  4. SQL Server tjekke følsomhed mellem store og små bogstaver?