如何快速判断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
(包括最底部的这个小技巧。)
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
(包括最底部的这个小技巧。)