sql >> Databáze >  >> RDS >> Sqlserver

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

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-



  1. Funkce SUM() v MariaDB

  2. Najít skutečný název sloupce aliasu použitého v pohledu?

  3. Jak provedu hromadné vložení do mySQL pomocí node.js

  4. Nelze nainstalovat pg gem v Mavericks s Postgres.app