SELECT vs CREATE TABLE AS SELECT执行时间

时间:2017-05-17 07:56:24

标签: postgresql

我的函数应该返回一个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行,所以我怀疑是通过网络发送数据所需的时间

1 个答案:

答案 0 :(得分:0)

<强>答案

selectcreate table as select的不同之处在于您使用数据的方式,首先将数据发送到客户端,后者将其保存到磁盘服务器端。

<强>为什么

可能的原因可能是链接缓慢,以及&#34;功能&#34;客户。根据运行psql的本地\copy (select * from) to 'local_file'花了3秒但PgAdmin花了很长时间来显示sam数据的事实,我认为你的版本PgAdmin(或任何版本)并不适合你的数据量显示(如你所说的36MB)。所以它不是链接,而是客户端。