TL;DR - 我还没有激活收集器,它似乎不是默认的;这有多糟糕,我应该激活它吗?
我刚刚在查询速度很慢的表上创建了一个新索引。
我通过
Explain
在查询上运行并在表/查询列的各种组合上创建索引来做到这一点。再次运行后,我没收了未使用的索引
Explain
,保留了已使用的索引然后我决定检查为该表收集的统计信息。事实证明,
SELECT schemaname, relname, last_analyze FROM pg_stat_all_tables WHERE relname = '<MY TABLE>';
最后一次分析返回 NULL。检查
postgresql.conf
我发现目前我根本没有分析...
...
#------------------------------------------------------------------------------
# STATISTICS
#------------------------------------------------------------------------------
# - Query and Index Statistics Collector -
#track_activities = on
#track_counts = on
#track_io_timing = off
#track_functions = none # none, pl, all
#track_activity_query_size = 1024 # (change requires restart)
#stats_temp_directory = 'pg_stat_tmp'
...
我的问题
- 查询规划器是否仍然有足够的信息来知道何时进行索引与进行全表扫描等?
- 什么时候应该考虑激活查询和索引统计收集器?(总是,仅在某些情况下,...)