gpt4 book ai didi

php - 在单个 SELECT 查询中设置 enable_seqscan = off

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:05:53 24 4
gpt4 key购买 nike

在对我的一个查询(Postgres)进行了多次测试后,我意识到通过设置 enable_seqscan = 关闭,查询占用其原始时间的 1/3(使用 psql 控制台和 EXPLAIN ANALYZE 完成)

由于不建议为整个服务器更改此设置,因此我想将其设置为 OFF仅针对此查询。
我该怎么做?可能吗?

我的实现基于框架 Kohana (PHP),它使用数据库对象 (DB::select) 来执行查询。

我的 postgres 在 CentOS Linux 上是 8.4.9。

最佳答案

为此,您可以在交易中使用 SET LOCAL。我引用手册:

The effects of SET LOCAL last only till the end of the current transaction, whether committed or not.

但这就像当你一直生病而不是找到原因时吃抗生素一样。通常,规划者选择次优计划是有原因的。你应该找到并修复它。见:

我怀疑 random_page_cost 的较低设置可能适合您。默认设置通常过于保守(太高)。如果您的大部分或所有数据库都被缓存(系统缓存会为重复使用并适合 RAM 的内容执行此操作),random_page_cost 几乎与 seq_page_cost 一样低(或者在极端情况下同样低) . random_page_cost 是计算索引使用成本的主要因素。

确保 autovacuum 正在运行并正确配置(处理 VACUUMANALYZE )。您需要使列统计信息保持最新,以便进行适当的查询规划。

并且 effective_cache_size 通常设置得太低了。

异常(exception)情况适用,有时查询计划器无法理解,尤其是对于旧版本。这让我想到了另一个微妙的点:upgrade to a current version of PostgreSQL。你的已经过时了。

关于php - 在单个 SELECT 查询中设置 enable_seqscan = off,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15165550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com