【发布时间】:2023-04-08 22:39:01
【问题描述】:
有没有更好的方法来代替SELECT COUNT(*) 语句来统计表中的记录数?
有时我们必须从使用 bcp 查询导入的临时表中计算数十亿条记录。
【问题讨论】:
-
谢谢@R.S,我研究了一下,我会检查性能。
标签: sql sql-server tsql
有没有更好的方法来代替SELECT COUNT(*) 语句来统计表中的记录数?
有时我们必须从使用 bcp 查询导入的临时表中计算数十亿条记录。
【问题讨论】:
标签: sql sql-server tsql
使用count(*) 或count(some_column) 是检查表记录计数的最快方法。
【讨论】:
count(*) 和 count(some_column) 不等效。
COUNT(*),因为使用列名(即使是PK 或其他NOT NULL 列)没有任何好处,而且它更短且(IMO)更清晰。出于这个原因,它也会更具防御性。是的,COUNT(1) 或 COUNT(*) 或 COUNT(PK) 都获得相同的计划(并在计划中显示为 COUNT(*)),SQL Server 将使用可用的最窄索引来执行 COUNT。
如果不需要过滤,下面的查询效果很好:
SELECT sum(rows) FROM SYS.PARTITIONS WHERE object_id=object_id('MY_TABLE') and index_id in(0,1)
检查 sql server 为该对象存储的行数。它无法返回任何带有计数的数据,也无法包含 group by 或 where。
【讨论】: