Pregunta

Si tengo una base de datos de MS Access con tablas vinculadas de dos servidores de bases de datos diferentes (por ejemplo, una tabla de una base de datos SQL Server y otra de una base de datos Oracle) y escribo una consulta que se UNE a esas dos tablas, ¿cómo accederá (o el motor a reacción, supongo?) manejar esta consulta? ¿Emitirá algunos SELECT en cada tabla primero para obtener los campos en los que ME UNO, averiguar qué filas coinciden y luego emitir más SELECT para esas filas?

¿Fue útil?

Solución

La clave para entender es esto:

¿Hace una pregunta que Access / Jet puede optimizar antes de enviar su solicitud a las dos bases de datos del servidor? Si se une a la totalidad de ambas tablas, Jet tendrá que solicitar ambas tablas, lo que sería feo.

Si, por otro lado, puede proporcionar criterios que limitan uno o ambos lados de la unión, Access / Jet puede ser más eficiente y solicitar el conjunto de resultados filtrado en lugar de la tabla completa.

Otros consejos

Sí, puede tener algunos problemas de rendimiento graves. He hecho este tipo de cosas durante años. Oracle, SQL y DB2 - ugh. A veces he tenido que configurarlo en un temporizador a las 5:00 a.m., así que cuando entro a las 7:00 ya está hecho.

Si su conjunto de datos es lo suficientemente significativo, a menudo es más rápido construir una tabla localmente y luego vincular los datos. Para conjuntos de datos remotos, también busque passthroughs.

Por ejemplo, supongamos que está retirando a todos los clientes de ayer del oráculo db y todas las compras de los clientes del sql db. Supongamos que tiene un promedio de 100 clientes diarios pero una lista de 30,000 y digamos que sus productos tienen una lista de 500,000. Puede consultar el oráculo db para su lista de 100 clientes, luego escribirlo como en la declaración IN en una consulta de paso al sql db. Obtendrá sus datos casi al instante.

O si sus conjuntos de registros son enormes, cree tablas locales de las dos ID, compárelas localmente y luego simplemente obtenga las coincidencias necesarias.

Es feo pero puedes ahorrarte horas literalmente.

Esa sería mi suposición. Ayuda si hay índices en ambos lados de la unión pero, como ninguno de los servidores tiene control total sobre la consulta, no es posible realizar una optimización adicional de la consulta.

No tengo experiencia práctica en unir tablas de dos sistemas de datos diferentes. Sin embargo, dependiendo de los requisitos, etc., etc., puede que le resulte más rápido ejecutar consultas SELECT con solo los registros y campos requeridos en las tablas de Access y realizar la unión y consulta final en Access.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top