QA@IT
«質問へ戻る

質問を投稿

PostgreSQLにてdblinkを使用したクエリーの実行結果を可能な限り早く取得したい

Oracle 10gにてdatabase linkを使用したテーブル同士を結合したSQLがあります。

Select A.KEY_COL
      ,B.COL1
      ,C.COL1
From LOCAL_TABLE A
    ,REMOTE_TABLE1@remote1 B
    ,REMOTE_TABLE2@remote2 C
Where A.KEY_COL = B.KEY_COL
  and A.KEY_COL = C.KEY_COL
  and A.COL2    = 'hoge'
...

DatabaseをPostgreSQLに変更することとなり、下記のようなクエリーを発行したところOracleでは3秒程度で
結果が取得できていたのですが、PostgreSQLでは時間がかかり過ぎてしまい結果を得ることができませんでした。

Create View REMOTE_TABLE1
  Select * From dblink('dbname=remote1 user=postgres',
                       'Select KEY_COL, COL1, COL2 From tbl')
    As t(KEY_COL text, COL1 text, COL2 text);

Create View REMOTE_TABLE2
  Select * From dblink('dbname=remote2 user=postgres',
                       'Select KEY_COL, COL1, COL2 From tbl')
    As t(KEY_COL text, COL1 text, COL2 text);

Select A.KEY_COL
      ,B.COL1
      ,C.COL1
From LOCAL_TABLE A
    ,REMOTE_TABLE1 B
    ,REMOTE_TABLE2 C
Where A.KEY_COL = B.KEY_COL
  and A.KEY_COL = C.KEY_COL
  and A.COL2    = 'hoge'
...

PostgreSQLでdblinkを使用したクエリーの速度を上げる良い方法はありませんでしょうか?

Oracle 10gにてdatabase linkを使用したテーブル同士を結合したSQLがあります。

```sql
Select A.KEY_COL
      ,B.COL1
      ,C.COL1
From LOCAL_TABLE A
    ,REMOTE_TABLE1@remote1 B
    ,REMOTE_TABLE2@remote2 C
Where A.KEY_COL = B.KEY_COL
  and A.KEY_COL = C.KEY_COL
  and A.COL2    = 'hoge'
...
```

DatabaseをPostgreSQLに変更することとなり、下記のようなクエリーを発行したところOracleでは3秒程度で
結果が取得できていたのですが、PostgreSQLでは時間がかかり過ぎてしまい結果を得ることができませんでした。

```sql
Create View REMOTE_TABLE1
  Select * From dblink('dbname=remote1 user=postgres',
                       'Select KEY_COL, COL1, COL2 From tbl')
    As t(KEY_COL text, COL1 text, COL2 text);

Create View REMOTE_TABLE2
  Select * From dblink('dbname=remote2 user=postgres',
                       'Select KEY_COL, COL1, COL2 From tbl')
    As t(KEY_COL text, COL1 text, COL2 text);

Select A.KEY_COL
      ,B.COL1
      ,C.COL1
From LOCAL_TABLE A
    ,REMOTE_TABLE1 B
    ,REMOTE_TABLE2 C
Where A.KEY_COL = B.KEY_COL
  and A.KEY_COL = C.KEY_COL
  and A.COL2    = 'hoge'
...
```

PostgreSQLでdblinkを使用したクエリーの速度を上げる良い方法はありませんでしょうか?