如何知道高插入率的大表中的实际计数

时间:2014-09-09 15:07:45

标签: postgresql

我们说我有一张10M行的表格。我需要知道行的确切数量。 COUNT请求需要5秒钟。让我们说每秒只有100行被添加到表中。

如果我现在要求数据库计数恰好有10,000,000行,并且此请求需要5秒才能完成,结果将是1000000010000500或这两个值之间的某个值?

2 个答案:

答案 0 :(得分:1)

如果您没有在显式事务中运行语句,那么它在语句开始执行时所提供的计数将是正确的,因此10000000不是10000500

如果您在事务中运行它,确切的行为取决于您使用的隔离级别,以及之前在该事务中发生的事情。

答案 1 :(得分:0)

假设您的表具有自动增量id列,您可以在几毫秒内执行此操作:

select max(id) - min(id)
from my_big_table

这假设您没有任何空白,这是典型的情况。

实际上,通过运行一次,您可以确切地知道“丢失”行数的增量:

select max(id) - count(*) from my_big_table

记住价值。除非删除行,否则不会更改(如果删除行,请再次运行)。

现在你知道了delta,这是准确的:

select max(id) - <delta>
from my_big_table

这将是准确且极快的,因此您无需担心慢查询的影响。