在O(1)中计算SQL表中的行

前端之家收集整理的这篇文章主要介绍了在O(1)中计算SQL表中的行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我理解计算sql表中行数的最好方法是count(*)(或等价于count(PrimaryKey)).

这是O(1)吗?
>如果没有,为什么不呢?

为什么不只是实现一个计数器并返回给这个具体的查询?是因为这个查询不是常见的用例吗?

如果答案根据sql引擎有所不同,我想听听差异 – 但是无论如何,我对生产sql引擎中的实际实现感兴趣.

解决方法

在一些RDBM中,这是O(1)(最值得注意的是 MySQL),把AFAIK一般都是皱眉而且被认为是“丑陋的表演黑客”.原因是如果您有事务(每个真正的RDBM都应该有),则表中的总行数可能与或可能不等于从当前事务中可以看到的总数.这就是为什么服务器需要检查哪些行实际上对您的事务可见,使得O(n)比O(1)更多.

如果要优化获取行数并满足近似结果的过程,则大多数RDBM具有特殊的“信息”表,其中包含有关表的信息,包括大致的行数(同样,它不是确切的由于事务的行数).

猜你在找的MsSQL相关文章