小编典典

计算一个非常大的表中确切行数的最快方法?

all

我遇到过一些文章说SELECT COUNT(*) FROM TABLE_NAME当表格有很多行和很多列时会很慢。

我有一个可能包含数十亿行的表[它大约有 15 列]。有没有更好的方法来获得表行数的 精确计数?

请在回答之前考虑以下事项:

  • 我正在寻找独立于数据库供应商的解决方案。如果它涵盖 MySQLOracleMS SQL Server 就可以了。但如果 真的 没有独立于数据库供应商的解决方案,那么我将为不同的数据库供应商提供不同的解决方案。

  • 我不能使用任何其他外部工具来执行此操作。我主要是在寻找基于 SQL 的解决方案。

  • 我无法进一步规范我的数据库设计。它已经在 3NF 中,而且已经围绕它编写了很多代码。


阅读 78

收藏
2022-05-18

共1个答案

小编典典

简单的回答:

  • 数据库供应商独立解决方案 = 使用标准 =COUNT(*)
  • 近似 的SQL Server 解决方案,但不要使用 COUNT(*) = out of scope

笔记:

COUNT(1) = COUNT(*) =
COUNT(PrimaryKey)
以防万一

编辑:

SQL Server 示例(14 亿行,12 列)

SELECT COUNT(*) FROM MyBigtable WITH (NOLOCK)
-- NOLOCK here is for me only to let me test for this answer: no more, no less

1 次跑步,5:46 分钟,计数 = 1,401,659,700

--Note, sp_spaceused uses this DMV
SELECT
   Total_Rows= SUM(st.row_count)
FROM
   sys.dm_db_partition_stats st
WHERE
    object_name(object_id) = 'MyBigtable' AND (index_id < 2)

2 次运行,均在 1 秒内,计数 = 1,401,659,670

第二个行数较少=错误。取决于写入是否相同或更多(删除是在几个小时内完成的)

2022-05-18