Question

Si j’ai une base de données MS Access avec des tables liées issues de deux serveurs de base de données différents (disons une table d’une base de données SQL Server et une autre d’une base de données Oracle) et que j’écris une requête qui joint ces deux tables, comment Access (ou le moteur Jet, je suppose?) gérer cette requête? Lance-t-il d'abord quelques SELECT sur chaque table pour obtenir les champs sur lesquels je me joins, déterminer quelles sont les lignes qui correspondent, puis émettre d'autres SELECT pour ces lignes?

Était-ce utile?

La solution

L'essentiel à comprendre est le suivant:

Posez-vous une question que Access / Jet peut optimiser avant d’envoyer sa demande aux deux bases de données du serveur? Si vous rejoignez l'intégralité des deux tables, Jet devra les demander, ce qui serait moche.

Si, en revanche, vous pouvez fournir des critères qui limitent un ou les deux côtés de la jointure, Access / Jet peut être plus efficace et demander le jeu de résultats filtré au lieu du tableau complet.

Autres conseils

Oui, vous pouvez avoir de sérieux problèmes de performances. J'ai fait ce genre de chose pendant des années. Oracle, SQL et DB2 - ugh. Parfois, je devais le régler sur une minuterie à 5h00 du matin, donc quand je rentre à 7h00, c'est fait.

Si votre jeu de données est suffisamment important, il est souvent plus rapide de créer une table localement, puis de lier les données. Pour les ensembles de données distants, examinez également les interconnexions.

Par exemple, disons que vous extrayez tous les clients d'hier de la base de données oracle et tous les achats des clients de la base de données sql. Supposons que vous avez en moyenne 100 clients par jour, mais une liste de 30 000 et disons que vos produits en contiennent 500 000. Vous pouvez interroger la base de données oracle pour votre liste de 100 clients, puis l'écrire comme dans l'instruction IN dans une requête intermédiaire vers la base de données SQL. Vous obtiendrez vos données presque instantanément.

Ou, si vos jeux d'enregistrements sont énormes, créez des tables locales des deux ID, comparez-les localement, puis extrayez les correspondances nécessaires.

C'est moche mais vous pouvez économiser littéralement des heures.

Ce serait ma supposition. Il est utile d’avoir des index des deux côtés de la jointure, mais comme aucun des deux serveurs n’exerce un contrôle total sur la requête, il n’est pas possible de l’optimiser davantage.

Je n'ai pas d'expérience pratique pour joindre des tables à partir de deux systèmes de données différents. Toutefois, en fonction des besoins, etc., vous pouvez trouver plus rapide d'exécuter des requêtes SELECT avec uniquement les enregistrements et les champs requis dans les tables Access et d'effectuer la jointure finale et la requête dans Access.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top