Dan*_*kov 24 postgresql performance postgresql-9.1
如果PostgreSQL的count(*)是始终慢怎么分页复杂的查询?
只要在这种情况下我们有很多页面(例如不同的类别,过滤器等),制作触发器似乎不是一个好的解决方案.
如果VACUUM/VACUUM ANALYZE/ANALYZE/VACUUM FULL没有帮助该怎么办?count(*)postgresql 使用的最佳实践是什么?
Cra*_*ger 18
你读过那篇文章的标题了吗?
请注意,以下文章仅适用于9.2之前的PostgreSQL版本.现在已实现仅索引扫描.
使用9.2,你通常会发现你得到了更好的结果.阅读仅索引扫描Wiki页面以获取详细信息.
也就是说,在旧版本上使用LIMIT并且OFFSET通常工作正常.如果您不介意一些变化,可以使用表统计信息估计行计数(以及页面计数).请参阅您已链接到的文章中的 "估算行数" .
无论如何,使用LIMIT和使用OFFSETIMO是一种反模式.很多时候你可以重新编写你的分页代码,以便它使用sort_column > 'last_seen_value' LIMIT 100,即它避免了偏移.这有时可以带来非常大的性能提升.
小智 11
如果您正在执行SELECT count(*)FROM table并且启用了pg stats,则可以使用较低的示例,在这种情况下,从13ms到0.05ms.
SELECT count(*) FROM news;
Run Code Online (Sandbox Code Playgroud)
26171
EXPLAIN ANALYZE SELECT count(*) FROM news;
Run Code Online (Sandbox Code Playgroud)
总运行时间:13.057毫秒
SELECT reltuples::bigint AS count FROM pg_class WHERE oid = 'public.news'::regclass;
Run Code Online (Sandbox Code Playgroud)
26171
EXPLAIN ANALYZE SELECT reltuples::bigint AS count FROM pg_class WHERE oid = 'public.news'::regclass;
Run Code Online (Sandbox Code Playgroud)
总运行时间:0.053毫秒
| 归档时间: |
|
| 查看次数: |
21174 次 |
| 最近记录: |