Ecco la situazione: abbiamo un database Oracle a cui dobbiamo connetterci per estrarre alcuni dati. Dal momento che ottenere l'accesso a detto database Oracle è un vero e proprio dolore (principalmente un ostacolo burocratico più che altro), stiamo solo progettando di collegarlo al nostro SQL Server e utilizzare il link per accedere ai dati quando ne abbiamo bisogno.
Per una delle nostre applicazioni, stiamo progettando di fare una vista per ottenere i dati di cui abbiamo bisogno.Ora i dati di cui abbiamo bisogno sono uniti da due tabelle.Se lo facciamo, quale sarebbe preferibile?
Questo (in pseudo-SQL se esiste una cosa del genere):
OPENQUERY(Oracle, "SELECT [cols] FROM table1 INNER JOIN table2")
o questo:
SELECT [cols] FROM OPENQUERY(Oracle, "SELECT [cols1] FROM table1")
INNER JOIN OPENQUERY(Oracle, "SELECT [cols2] from table2")
C'è qualche motivo per preferire uno rispetto all'altro? Una cosa da tenere a mente: siamo limitati a quanto tempo la query può essere eseguita per accedere al server Oracle.
risposte:
2 per risposta № 1Se l'inner join riduce significativamente il numero totale di righe, l'opzione 1 risulterà in un traffico di rete molto inferiore (poiché non avrai tutte le righe di table1 che devono attraversare il link db
3 per risposta № 2
Vado con la tua prima opzione soprattutto se la tua query contiene una clausola where per selezionare un sottoinsieme dei dati nelle tabelle.
Richiederà meno lavoro su entrambi i server, supponendo che ci siano indici sulle tabelle nel server Oracle che supportano l'operazione di join.
2 per risposta № 3
Ciò che Hamishmcn ha detto vale.
Anche, SQL Server non ne sa davvero nullagli indici o le statistiche o la cache conservati dal server Oracle. Pertanto, il server Oracle può probabilmente eseguire un lavoro molto più efficiente con il join rispetto a quello del server sql.