【发布时间】:2011-08-29 11:31:57
【问题描述】:
我遇到过一些文章指出,当表格有很多行和很多列时,SELECT COUNT(*) FROM TABLE_NAME 会很慢。
我有一个可能包含数十亿行的表 [它大约有 15 列]。有没有更好的方法来获取表格行数的EXACT计数?
请在回答之前考虑以下几点:
我正在寻找数据库供应商 独立解决方案。如果是就OK 涵盖 MySQL、Oracle、MS SQL Server。 但是如果有真的没有数据库 供应商独立解决方案然后我 将满足于不同的解决方案 针对不同的数据库供应商。
我无法使用任何其他外部工具 去做这个。我主要是找一个 基于 SQL 的解决方案。
我无法规范化我的数据库设计 任何进一步。它已经在 3NF 中,而且是 很多代码已经写好了 在它周围。
【问题讨论】:
-
难道我们不希望我们的数据库供应商已经优化了这个特殊的结构吗?
-
@Swaranga,您能否详细说明一下这个数据库维护的目的是什么,必须知道表中的确切行数?我无法想象。正如 Kevin 所说,如果有比 COUNT(*) 更快的方法,那么 DBMS 供应商肯定会(应该)重新实现 COUNT(*) 以使用它......
-
当然,如果经常写入表,那么您的确切计数只会在特定时间点准确,如果其他进程正在写入表,甚至可能不准确,除非您输入查询上的表锁。
-
您可以使用插入和删除触发器来保持滚动计数吗?
-
如果
insert trigger太贵了,但delete trigger是负担得起的,请参阅我的回答stackoverflow.com/a/39295280/199364 的方法,对于具有自动增量ID 的表:跟踪计数和每个计数的最后一个ID天,在适当的时候删除触发器递减计数。