ANALYZE语句可用于PostgreSQL中收集表的统计数据。然而,我不想将这些数据实际插入到表中,我只需要评估一些查询的成本,无论如何手动指定PostgreSQL中表的统计数据而不实际将数据放入它中?如何手动更新PostgreSQL中表的统计数据
1
A
回答
2
我觉得你很混乱ANALYZE
与EXPLAIN ANALYZE
。有不同的事情。
如果您想要查询成本和时间而不应用更改,则唯一的实际选项是开始一个事务,执行EXPLAIN ANALYZE
下的查询,然后执行ROLLBACK
下的查询。
这仍然执行查询,这意味着:
- CPU时间和I/O消耗
- 锁仍采取和保持时间
- 新行实际上写的是表和索引,但从未标记为可见。他们在下一个
VACUUM
清理。
1
即使没有插入数据,您也可以已经EXPLAIN ANALYZE查询,它可以帮助您了解执行计划。
但是没有像真实数据那样的东西:) 作为解决方法,您可以做些什么开始一个事务,插入一些数据,EXPLAIN ANALYZE查询,然后ROLLBACK您的事务。
实施例:
mydatabase=# BEGIN;
BEGIN
mydatabase=# INSERT INTO auth_message (user_id, message) VALUES (1, 'foobar');
INSERT 0 1
mydatabase=# EXPLAIN ANALYSE SELECT count(*) FROM auth_message;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------
Aggregate (cost=24.50..24.51 rows=1 width=0) (actual time=0.011..0.011 rows=1 loops=1)
-> Seq Scan on auth_message (cost=0.00..21.60 rows=1160 width=0) (actual time=0.007..0.008 rows=1 loops=1)
Total runtime: 0.042 ms
(3 lignes)
mydatabase=# ROLLBACK;
ROLLBACK
mydatabase=# EXPLAIN ANALYSE SELECT count(*) FROM auth_message;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------
Aggregate (cost=24.50..24.51 rows=1 width=0) (actual time=0.011..0.011 rows=1 loops=1)
-> Seq Scan on auth_message (cost=0.00..21.60 rows=1160 width=0) (actual time=0.009..0.009 rows=0 loops=1)
Total runtime: 0.043 ms
(3 lignes)
的第一EXPLAIN ANALYZE表明,有一些 “临时” 数据(行数= 1)
这不是严格意义上的 “模拟”,但至少,PostgreSQL的计划执行(和它可以做的各种优化)应该是,恕我直言,最好比没有数据(免责声明:纯粹直观)
+0
啊......并且在ROLLBACK之后添加VACUUM ANALYZE your_table可能有助于清除用于执行计划的统计信息中的潜在修改......但我不是PostgreSQL专家,我不确定回滚事务是否也回滚表统计信息。 –
相关问题
- 1. Oracle手动更新所有表上的统计信息
- 2. 如何手动更新仪表板数据与Google表单?
- 3. 如何通过postgresql中的数据顺序更新表?
- 4. 当postgresql服务器启动时,postgresql中是否有系统表自动更新?
- 5. 如何用postgresql统计表中的术语数量?
- 6. 如何统计PostgreSQL中不同表的特定两列的数据?
- 7. 更新手动数据库更改
- 8. 如何手动更新MySQL表索引?
- 9. 更新统计信息和表格数
- 10. 根据计数更新表
- 11. 生成PostgreSQL统计/数据分析
- 12. 更新PostgreSQL中的表格
- 13. 如何手动更新ArrayController
- 14. POSTGRESQL函数更新表中的字段
- 15. 如何在PostgreSQL和MySQL中获取数据库数据传输统计信息?
- 16. 手动更改postgresql中查询的执行计划?
- 17. PostgreSQL表更新
- 18. 更新计数器触发的PostgreSQL
- 19. 如何设计用于数据查询和数据更新的系统
- 20. 从SQL数据库自动更新统计信息
- 21. 手动更新Flyway中的schema_version表
- 22. 笨数据库更新手动
- 23. 如何手动刷新数据绑定?
- 24. 如何动态统计数据库中的行数?
- 25. 如何统计表中的行数?
- 26. 如何从数据库中自动获取系统时间和更新数据
- 27. 如何在angularjs中手动更新$ scope
- 28. 如何在删除一些以前的数据后重新启动PostgreSQL中的表的计数?
- 29. 如何在Android中动态创建的表中更新数据?
- 30. 如何统计Excel数据表中的行数?
嗨,谢谢你的回复。那么,也许我的陈述有点不清楚,我的意思是我想找到一种方法来手动指定表的统计信息,说表A没有数据,但我想让PostgreSQL认为那里在该表中有1000行,因此我可以使用模拟统计来评估查询。 – yingzhox
@ user1780833是的,非常不清楚!在这一点上,考虑发布一个新的,包括那些相当重要的细节和任何其他相关的背景。 –