我遇到过一些文章说SELECT COUNT(*) FROM TABLE_NAME当表格有很多行和很多列时会很慢。
SELECT COUNT(*) FROM TABLE_NAME
我有一个可能包含数十亿行的表[它大约有 15 列]。有没有更好的方法来获得表行数的 精确计数?
请在回答之前考虑以下事项:
我正在寻找独立于数据库供应商的解决方案。如果它涵盖 MySQL 、 Oracle 、 MS SQL Server 就可以了。但如果 真的 没有独立于数据库供应商的解决方案,那么我将为不同的数据库供应商提供不同的解决方案。
我不能使用任何其他外部工具来执行此操作。我主要是在寻找基于 SQL 的解决方案。
我无法进一步规范我的数据库设计。它已经在 3NF 中,而且已经围绕它编写了很多代码。
简单的回答:
COUNT(*)
笔记:
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
第二个行数较少=错误。取决于写入是否相同或更多(删除是在几个小时内完成的)