Domanda

Se ho un database MS Access con tabelle collegate da due diversi server di database (diciamo una tabella da un db di SQL Server e una da un db Oracle) e scrivo una query che unisce queste due tabelle, come accederà (o il motore Jet, immagino?) gestire questa query? Emetterà prima alcuni SELECT su ogni tabella per ottenere i campi su cui mi sto unendo, capire quali righe corrispondono, quindi emettere più SELECT per quelle righe?

È stato utile?

Soluzione

La cosa chiave da capire è questa:

Stai ponendo una domanda che Access / Jet può ottimizzare prima di inviare la sua richiesta ai due database del server? Se stai unendo tutte e due le tabelle, Jet dovrà richiedere entrambe le tabelle, il che sarebbe brutto.

Se, d'altra parte, è possibile fornire criteri che limitano uno o entrambi i lati del join, Access / Jet può essere più efficiente e richiedere il set di risultati filtrato anziché l'intera tabella.

Altri suggerimenti

Sì, puoi avere seri problemi di prestazioni. Ho fatto questo tipo di cose per anni. Oracle, Sql e DB2 - ugh. A volte ho dovuto impostarlo su un timer alle 5:00, quindi quando arrivo alle 7:00 è fatto.

Se il set di dati è abbastanza significativo, spesso è più veloce creare una tabella localmente e quindi collegare i dati. Per i set di dati remoti, esaminare anche le passthrough.

Ad esempio, supponiamo che stai estraendo tutti i clienti di ieri dall'oracle db e tutti gli acquisti dei clienti da sql db. Diciamo che hai una media di 100 clienti al giorno ma un elenco di 30.000 e diciamo che i tuoi prodotti hanno un elenco di 500.000. È possibile eseguire una query dell'oracle db per l'elenco di 100 clienti, quindi scriverlo come nell'istruzione IN in una query passthrough nel sql db. Otterrai i tuoi dati quasi istantaneamente.

O se i tuoi recordset sono enormi, costruisci tabelle locali dei due ID, confrontali localmente e poi tira semplicemente le corrispondenze necessarie.

È brutto ma puoi risparmiarti ore letteralmente.

Sarebbe la mia ipotesi. Aiuta se ci sono indici su entrambi i lati del join ma, poiché nessuno dei due server ha il pieno controllo della query, non è possibile un'ulteriore ottimizzazione della query.

Non ho esperienza pratica nell'unire tabelle di due diversi sistemi di dati. Tuttavia, a seconda dei requisiti, ecc., Ecc., Potrebbe essere più rapido eseguire query SELECT con solo i record e i campi richiesti nelle tabelle di Access ed eseguire l'unione e la query finali in Access.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top