我们说我有一张10M行的表格。我需要知道行的确切数量。 COUNT
请求需要5秒钟。让我们说每秒只有100行被添加到表中。
如果我现在要求数据库计数恰好有10,000,000行,并且此请求需要5秒才能完成,结果将是10000000
,10000500
或这两个值之间的某个值?
答案 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
这将是准确且极快的,因此您无需担心慢查询的影响。