我的函数应该返回一个TABLE
,它是由很多连接创建的,并且是相对"大"。
如果在我的函数内部放return query select <complex query goes here>;
,那么运行需要很长时间(更像是10-15分钟)。
但是,如果不是返回TABLE
,而是返回VOID
,只需在函数体内创建一个表 - 它在1分钟内完成。
运行这个&#34;复杂查询&#34;同样如此。作为select <complex query goes here>
VS create table <table name> as select <complex query goes here>
然后select * from <table_name>
。
为什么执行时间会有这么大差异?
P.S。查询的select子句有大约35列,里面有一些逻辑。
P.P.S。查询只返回大约90K行,所以我怀疑是通过网络发送数据所需的时间
答案 0 :(得分:0)
<强>答案强>
select
与create table as select
的不同之处在于您使用数据的方式,首先将数据发送到客户端,后者将其保存到磁盘服务器端。
<强>为什么强>
可能的原因可能是链接缓慢,以及&#34;功能&#34;客户。根据运行psql
的本地\copy (select * from) to 'local_file'
花了3秒但PgAdmin花了很长时间来显示sam数据的事实,我认为你的版本PgAdmin(或任何版本)并不适合你的数据量显示(如你所说的36MB)。所以它不是链接,而是客户端。