Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Брой(*) срещу Брой(1) - SQL Server

Няма разлика.

Причина:

Книги онлайн казва „COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } ) "

"1" е ненулев израз:така че е същото като COUNT(*) .Оптимизаторът го разпознава такъв, какъвто е:тривиален.

Същото като EXISTS (SELECT * ... или EXISTS (SELECT 1 ...

Пример:

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

Същият IO, същият план, работи

Редактиране, август 2011 г.

Подобен въпрос на DBA.SE.

Редактиране, декември 2011 г.

COUNT(*) се споменава специално в ANSI-92 (потърсете "Scalar expressions 125 ")

Случай:

a) Ако е посочен COUNT(*), тогава резултатът е мощността на T.

Това означава, че стандартът ANSI го разпознава като кървене, очевидно това, което имате предвид. COUNT(1) е оптимизиран от доставчиците на RDBMS защото на това суеверие. В противен случай той ще бъде оценен според ANSI

b) В противен случай нека TX е таблицата с една колона, която е резултат от прилагането на <израза на стойността> към всеки ред на Tand, елиминирайки нулевите стойности. Ако една или повече нулеви стойности са елиминирани, тогава се повдига условие за завършване:предупреждение-



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 начина за създаване на таблица на свързан сървър с помощта на T-SQL

  2. Правилен метод за изтриване на над 2100 реда (по ID) с Dapper

  3. Как да върнете всички ненадеждни ограничения на външния ключ в SQL Server (пример за T-SQL)

  4. Как да създадете свързана към схема съхранена процедура в SQL Server

  5. Как да използвате RANK() в SQL Server