Není v tom žádný rozdíl.
Důvod:
Knihy online říkají "
."COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
"
"1" je výraz bez nuly:je tedy stejný jako COUNT(*)
.Optimalizátor to rozpozná, co to je:triviální.
Stejné jako EXISTS (SELECT * ...
nebo EXISTS (SELECT 1 ...
Příklad:
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
Stejná IO, stejný plán, fungují
Edit, srpen 2011
Podobná otázka na DBA.SE.
Edit, prosinec 2011
COUNT(*)
je konkrétně zmíněn v ANSI-92 (hledejte "Scalar expressions 125
")
Případ:
a) Pokud je zadáno COUNT(*), pak je výsledkem mohutnost T.
To znamená, že standard ANSI uznává, že krvácení je zřejmé, co máte na mysli. COUNT(1)
byl optimalizován dodavateli RDBMS protože této pověry. V opačném případě by byl hodnocen podle ANSI
b) V opačném případě nechť TX je jednosloupcovou tabulkou, která je výsledkem použití
na každý řádek Tandu eliminující nulové hodnoty. Pokud je odstraněna jedna nebo více hodnot null, je aktivována podmínka dokončení:warning-