sql >> Database >  >> RDS >> Sqlserver

Aantal(*) versus Aantal(1) - SQL Server

Er is geen verschil.

Reden:

Boeken online zegt "COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } ) "

"1" is een niet-null-expressie:het is dus hetzelfde als COUNT(*) .De optimizer herkent het voor wat het is:triviaal.

Hetzelfde als EXISTS (SELECT * ... of EXISTS (SELECT 1 ...

Voorbeeld:

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

Zelfde IO, zelfde plan, de werken

Bewerken, aug 2011

Soortgelijke vraag over DBA.SE.

Bewerken, december 2011

COUNT(*) wordt specifiek genoemd in ANSI-92 (zoek naar "Scalar expressions 125 ")

Case:

a) Als COUNT(*) is opgegeven, is het resultaat de kardinaliteit van T.

Dat wil zeggen, de ANSI-standaard herkent het als bloeden, duidelijk wat u bedoelt. COUNT(1) is geoptimaliseerd door RDBMS-leveranciers omdat van dit bijgeloof. Anders zou het worden beoordeeld volgens ANSI

b) Laat anders TX de tabel met één kolom zijn die het resultaat is van het toepassen van de op elke rij Tand waarbij nulwaarden worden geëlimineerd. Als een of meer null-waarden worden geëlimineerd, wordt een voltooiingsvoorwaarde verhoogd:waarschuwing-



  1. PostgreSQL-extensie installeren op alle schema's

  2. Ontvang de eerste dag van de maand in PostgreSQL

  3. Gids voor het ontwerpen van een database voor quiz in MySQL

  4. Hoe maak je een Postgres-tabel met een unieke gecombineerde primaire sleutel?