sql >> Databasteknik >  >> RDS >> Sqlserver

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

Det är ingen skillnad.

Anledning:

Böcker online säger "COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } ) "

"1" är ett icke-null-uttryck:så det är samma som COUNT(*) .Optimeraren känner igen det för vad det är:trivialt.

Samma som EXISTS (SELECT * ...). eller EXISTS (SELECT 1 ...

Exempel:

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

Samma IO, samma plan, fungerar

Redigera, augusti 2011

Liknande fråga på DBA.SE.

Redigera, dec 2011

COUNT(*) nämns specifikt i ANSI-92 (leta efter "Scalar expressions 125 ")

Fall:

a) Om COUNT(*) anges är resultatet kardinaliteten av T.

Det vill säga, ANSI-standarden känner igen det som blödande uppenbart vad du menar. COUNT(1) har optimerats av RDBMS-leverantörer eftersom av denna vidskepelse. Annars skulle det utvärderas enligt ANSI

b) I annat fall, låt TX vara den enkolumnstabell som är resultatet av att tillämpa på varje rad av Tand och eliminera nollvärden. Om ett eller flera nollvärden elimineras, ställs ett kompletteringsvillkor upp:varning-



  1. Sätt att migrera SQL Server Database till Azure SQL Database

  2. SQLAlchemy PÅ DUBLIKATNYCKELUPPDATERING

  3. SQLite datatyper

  4. MySQL - Styr vilken rad som returneras av en grupp av