Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Đếm (*) so với Đếm (1) - Máy chủ SQL

Không có sự khác biệt.

Lý do:

Sách trực tuyến cho biết "COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } ) "

"1" là một biểu thức không rỗng:vì vậy nó giống với COUNT(*) .Trình tối ưu hóa nhận dạng nó cho những gì nó là:tầm thường.

Giống như EXISTS (SELECT * ... hoặc EXISTS (SELECT 1 ...

Ví dụ:

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

Cùng một IO, cùng một kế hoạch, cùng hoạt động

Chỉnh sửa, tháng 8 năm 2011

Câu hỏi tương tự trên DBA.SE.

Chỉnh sửa, tháng 12 năm 2011

COUNT(*) được đề cập cụ thể trong ANSI-92 (tìm kiếm "Scalar expressions 125 ")

Trường hợp:

a) Nếu COUNT (*) được chỉ định, thì kết quả là bản số của T.

Đó là, tiêu chuẩn ANSI công nhận nó là rõ ràng ý bạn muốn nói. COUNT(1) đã được tối ưu hóa bởi các nhà cung cấp RDBMS bởi vì của sự mê tín này. Nếu không, nó sẽ được đánh giá theo ANSI

b) Nếu không, hãy đặt TX là bảng một cột có kết quả là áp dụng cho mỗi hàng của T và loại bỏ các giá trị null. Nếu một hoặc nhiều giá trị null được chọn, thì điều kiện hoàn thành được đưa ra:cảnh báo-



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đặt giá trị bắt đầu cho cột với tự động tăng

  2. Cách OBJECTPROPERTYEX () hoạt động trong SQL Server

  3. làm thế nào để bỏ qua một hàng xấu trong nguồn tệp phẳng ssis

  4. Thứ tự loại dữ liệu trong SQL Server

  5. Các tính năng mới trong SQL Server 2017 (Công cụ cơ sở dữ liệu)