2012-12-21 12 views
2

J'ai cette requête contenant un dblink puisque j'ai besoin de se connecter à une autre base de données et il semble si lent (50.343 secondes pour seulement 124 enregistrements). Y a-t-il un moyen de le rendre rapide? Voici le code:postgresql lente requête (dblink et jointure interne)

select * 
from 
    customer 
    INNER JOIN 
    dblink('host=192.168.3.9 dbname=db2 user=postgres password=postgres', ' 
     SELECT 
      status, 
      last_churn_1, 
      attempts, 
      last_dialed, 
      lead_id, 
      date_added 
     FROM campaign_customer 
     ') AS table2 (
      status char(50), 
      last_churn_1 char(50), 
      attempts int, 
      last_dialed char(250), 
      lead_id char(8), 
      date_added char(50) 
     ) ON customer.phone1 = table2.last_dialed 
where customer.leadid = '3434' and table2.lead_id='3434' 
+1

Pouvez-vous montrer 'EXPLIQUER ANALYZE' de cette requête? –

+2

Déplacez les clauses where dans la requête de dblink autant que vous le pouvez, sinon l'exécuteur récupérera la table distante entière. Aussi vraisemblablement votre 'table2' devrait être' s'? –

+0

@ DanielVérité ok malade l'essayer. –

Répondre

3

Comme Daniel suggéré:

select * 
from 
    customer 
    INNER JOIN 
    dblink('host=192.168.3.9 dbname=db2 user=postgres password=postgres', $$ 
     SELECT 
      status, 
      last_churn_1, 
      attempts, 
      last_dialed, 
      lead_id, 
      date_added 
     FROM campaign_customer 
     where lead_id='3434' 
     $$) AS table2 (
      status char(50), 
      last_churn_1 char(50), 
      attempts int, 
      last_dialed char(250), 
      lead_id char(8), 
      date_added char(50) 
     ) ON customer.phone1 = table2.last_dialed 
where customer.leadid = '3434' 
+0

merci. celui-ci fonctionne: D –

Questions connexes