Mat*_*ert 5 sql postgresql view count
我阅读了Postgres Wiki中的慢速计数条目。
对于我的表格来说,估计值相当准确。不过,对于观点
SELECT reltuples FROM pg_class WHERE relname = 'tbl';
Run Code Online (Sandbox Code Playgroud)
不起作用并且总是返回 0 条记录。除此之外,还有其他方法可以计算或估计 Postgres 中视图的行数吗?
SELECT COUNT(*) FROM someview;
Run Code Online (Sandbox Code Playgroud)
ANALYZE对于视图也不起作用(对于表没有问题),我只是得到:
ANALYZE v_myview;
WARNING: skipping "v_myview" --- cannot analyze non-tables or special system tables
ANALYZE
Run Code Online (Sandbox Code Playgroud)
查询返回,0因为这是正确的答案。
SELECT reltuples FROM pg_class WHERE relname = 'someview';
Run Code Online (Sandbox Code Playgroud)
A VIEW(与物化视图不同)不包含任何行。在内部,它是一个带有规则的空表(0 行)ON SELECT DO INSTEAD。手册:
该视图并未物理实体化。相反,每次在查询中引用视图时都会运行该查询。
因此,ANALYZE不适用于视图。
系统不维护视图的行计数估计。根据实际的视图定义,您也许能够从基础表的估计中得出一个数字。
AMATERIALIZED VIEW也可能是一个很好的解决方案:
CREATE MATERIALIZED VIEW someview_ct AS SELECT count(*) AS ct FROM someview;
Run Code Online (Sandbox Code Playgroud)
或者直接基于实际的视图定义。通常比具体化完整的派生表便宜得多。这是一个快照,就像 中的估计一样pg_class,只是在 后立即更准确REFRESH。您可以运行一次昂贵的计数并重复使用结果,直到您怀疑它是否仍然足够新鲜为止。
有关的:
| 归档时间: |
|
| 查看次数: |
5635 次 |
| 最近记录: |