如何快速判断table是否超过N行?

How to determine whether table has more than N rows quickly?

Table mytable 在不同的数据库中可能有 0 .. 150000 行。
如何快速判断是否超过100行?

看起来像这个查询:

select count(*)>100 from mytable 

扫描整个 table,这会花费很多时间。如何加快速度?

感兴趣的上限并不总是正好是 100。它可以是 (50, 150) 范围内的任何值。

如何找到 table 超过 100 +/- 50 行? 也许查询计划器使用的统计数据库或一些索引计数可以使用?

使用 Postgres 12.2
ASP.NET 使用 EF Core 和 Npgsql 的 MVC 6 应用程序。

How to determine whether it has more than approximately 100 rows rapidly?

完美的解决方案:

SELECT count(*) FROM (SELECT FROM mytable LIMIT 101) t;

如果得到 101,则 table 超过 100 行(精确计数,不是近似值)。否则你会得到微小的计数。无论哪种方式,Postgres 都不会考虑超过 101 行,这将始终是 fast.
(显然,如果 150 是您的实际上限,请改用 LIMIT 151。)

有关其他快速计算或估算的方法,请参阅:

  • Fast way to discover the row count of a table in PostgreSQL
    (包括最底部的这个小技巧。)