gpt4 book ai didi

sql - 在 PostgreSQL 分区表中使用函数时,它会进行全表扫描

转载 作者:行者123 更新时间:2023-12-02 03:53:00 26 4
gpt4 key购买 nike

这些表在 PostgreSQL 9 数据库中进行分区。当我运行以下脚本时:

select * from node_channel_summary
where report_date between '2012-11-01' AND '2012-11-02';

它从正确的表中发送数据而不进行全表扫描。然而,如果我运行这个脚本:

select * from node_channel_summary
where report_date between trunc(sysdate)-30 AND trunc(sysdate)-29;

在这种情况下,它会进行全表扫描,其性能是 Not Acceptable 。 -30 和 -29 将被参数替换。

经过一些研究,Postgres 不能正常使用函数和分区表。

有人知道解决此问题的方法吗?

最佳答案

问题是 PostgreSQL 在您编译函数时计算并缓存执行计划。这是分区表的问题,因为 PostgreSQL 使用查询计划器来消除分区。您可以通过将查询指定为字符串来解决此问题,强制 PostgreSQL 在运行时重新解析和重新计划您的查询:

FOR row IN EXECUTE 'select * from node_channel_summary where report_date between trunc(sysdate)-30 AND trunc(sysdate)-29' LOOP
-- ...
END LOOP;

-- or
RETURN QUERY EXECUTE 'select * from ...'

关于sql - 在 PostgreSQL 分区表中使用函数时,它会进行全表扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13705700/

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