1
我有一个庞大的查询在postgres上运行,其中一个连接表格总是进行顺序扫描。列上的索引存在,postgres没有使用它。我做了一个真空分析,然后postgres查询计划立即更改为执行索引扫描。如何高效地真空分析Postgres中的表格
我的问题是做真空分析的最有效方法是什么。它锁定表吗?如果是这样,你如何真空分析现场制作表?
我有一个庞大的查询在postgres上运行,其中一个连接表格总是进行顺序扫描。列上的索引存在,postgres没有使用它。我做了一个真空分析,然后postgres查询计划立即更改为执行索引扫描。如何高效地真空分析Postgres中的表格
我的问题是做真空分析的最有效方法是什么。它锁定表吗?如果是这样,你如何真空分析现场制作表?
你只能运行分析,也不需要运行真空。 Sintax将是:
ANALYZE [ VERBOSE ] [ table_name [ (column_name [, ...]) ] ]
在文档它指出:
ANALYZE requires only a read lock on the target table, so it can run in parallel with other activity on the table.
您可以在这里找到更多的信息:
http://www.postgresql.org/docs/9.4/static/sql-analyze.html
https://wiki.postgresql.org/wiki/Introduction_to_VACUUM,_ANALYZE,_EXPLAIN,_and_COUNT
'和的一个连接表总是进行顺序扫描。列上的索引存在,postgres只是没有使用它。“这与VACUUM无关。 – wildplasser
也许它是无关的。但是在做了真空分析之后,这个计划改变了。如果你能提出一个更有意义的答案,比说出与其无关的东西更有帮助。 – Ramanan
是的,VACUUM ANALYZE更新统计数据,这可能会导致选择另一个计划。通常这只在表格发生变化时才重要(例如,通过添加索引或将新数据导入新表格中)(对不起:我忽略了ANALYZE部分) – wildplasser