【发布时间】:2017-05-17 07:56:24
【问题描述】:
我的函数应该返回一个TABLE,它是由许多连接创建的,并且相对“大”。
如果在我的函数内部我输入了return query select <complex query goes here>;,那么运行需要很长时间(更像是 10-15 分钟)。
但是,如果我不返回TABLE,而是返回VOID 并简单地在函数体内创建一个表 - 它在 1 分钟内完成。
以select <complex query goes here> VS create table <table name> as select <complex query goes here> 然后select * from <table_name> 运行这个“复杂查询”也是如此。
为什么执行时间会有这样的差异?
附:查询的 select 子句大约有 35 列,其中包含一些逻辑。
附言该查询仅返回大约 90K 行,因此我怀疑这是通过网络发送数据所花费的时间
【问题讨论】:
-
检索数据的时间?.. 比较计划 - 两者应该相同,如果是这样,则需要将数据发送到客户端(并显示它)
-
要验证这一点,请尝试从快速版本中创建的表中
SELECT *。 -
SELECT * from that table 大约需要 10 秒才能返回数据
-
@Dennis 所有数据?.. 还是只是一页?.. Laurenz 的方式很好,但可以被客户克服 - 尝试在
psql中运行\copy table_name to 'local_file'?.. -
@VaoTsun 好的。不知道为什么会这样,但是为“所有数据”选择 * 也需要很长时间(我在几分钟后停止了它)。 “复制”命令在 3 秒内完成相同的操作。知道为什么会这样吗?输出文本文件大小为 36MB。
标签: postgresql