2017-05-17 10 views
0

私の関数は多くの結合によって作成され、比較的 "大きい" TABLEを返します。SELECTと実行テーブルの選択実行時間

私の関数の中に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>と同じ "複雑なクエリ"を実行する場合も同じです。

実行時間にこのような違いがあるのはなぜですか?

P.S.クエリのselect句には、内部にロジックを持つ約35列があります。

P.P.S.クエリは約90Kの行を返しますので、私はそれがネットワーク

+2

データを取得する時間は?両者は同じである必要がある場合は、クライアントにデータを送信することです(表示する) –

+1

これを確認するには、テーブルが高速版で作成されました。 –

+0

そのテーブルからのSELECT *はデータを返すのに約10秒かかります – Dennis

答えて

0

selectあなたがデータを使用するようにしcreate table as select異なり答え、最初の意志を介してデータを送信するのにかかる時間であることを疑いますクライアントにデータを送信し、クライアントはデータをディスク・サーバー側に保存します。

なぜ

考えられる理由は、低速リンク、およびクライアントの「機能」である可能性があります。現地のpsql\copy (select * from) to 'local_file'を実行していて、3秒かかりましたが、まだPgAdminがsamデータを表示するのに時間がかかっていたことによると、あなたのバージョンPgAdmin(またはすべてのバージョン) 。だから、それはリンクではなくクライアントでした。

+0

PSequelはすべてのデータを表示するのに40秒かかります – Dennis

+0

SQLWorkbenchJは1分かかる – Dennis