Производительность MS Access при присоединении из связанных таблиц на разных серверах? - PullRequest
1 голос
/ 26 июня 2009

Если у меня есть база данных MS Access со связанными таблицами с двух разных серверов баз данных (скажем, одна таблица из базы данных SQL Server и одна из базы данных Oracle), и я пишу запрос, который объединяет эти две таблицы, как будет работать Access (или реактивный двигатель, наверное?) справиться с этим запросом? Будет ли сначала выдаваться несколько команд SELECT для каждой таблицы, чтобы получить поля, к которым я присоединяюсь, выяснить, какие строки совпадают, а затем выдать больше команд SELECT для этих строк?

Ответы [ 4 ]

3 голосов
/ 26 июня 2009

Да, у вас могут быть серьезные проблемы с производительностью. Я делал такие вещи годами. Oracle, Sql и DB2 - тьфу. Иногда мне приходилось настраивать таймер в 5:00, поэтому, когда я вхожу в 7:00, все готово.

Если ваш набор данных достаточно важен, часто быстрее создать таблицу локально, а затем связать данные. Для удаленных наборов данных, также посмотрите в сквозные.

Например, допустим, вы вытаскиваете всех вчерашних клиентов из базы данных Oracle и все покупки клиентов из базы данных SQL. Допустим, у вас в среднем 100 клиентов в день, но список составляет 30 000, и, скажем, у ваших продуктов список 500 000. Вы можете запросить у oracle db список из 100 клиентов, а затем записать его в виде IN в сквозном запросе к sql db. Вы получите ваши данные почти мгновенно.

Или, если ваши наборы записей огромны, создайте локальные таблицы из двух идентификаторов, сравните их локально, а затем просто выберите необходимые совпадения.

Это ужасно, но вы можете сэкономить часы буквально.

2 голосов
/ 27 июня 2009

Главное, что нужно понять, это:

Вы задаете вопрос, который Access / Jet может оптимизировать, прежде чем он отправит свой запрос в две базы данных сервера? Если вы объединяете обе таблицы целиком, Jet должен будет запросить обе таблицы, что будет ужасно.

Если, с другой стороны, вы можете указать критерии, ограничивающие одну или обе стороны объединения, Access / Jet может быть более эффективным и запрашивать отфильтрованный набор результатов вместо полной таблицы.

2 голосов
/ 26 июня 2009

Это было бы мое предположение. Это помогает, если на обеих сторонах объединения есть индексы, но, поскольку ни один из серверов не имеет полного контроля над запросом, дальнейшая оптимизация запроса невозможна.

1 голос
/ 26 июня 2009

У меня нет практического опыта объединения таблиц из двух разных систем данных. Однако, в зависимости от требований и т. Д. И т. П., Может оказаться более быстрым запуск запросов SELECT только с теми записями и полями, которые необходимы для таблиц Access, и выполнение окончательного соединения и запроса в Access.

...