Оптимизация запросов в Jet Engine основана на статистике, но как они обновляются с помощью связанных таблиц? - PullRequest
0 голосов
/ 10 ноября 2009

Я имею дело с некоторыми устаревшими базами данных доступа <2007. Все таблицы являются связанными таблицами с SQL Server 2008. Пока устанавливаются odbc-ссылки, структура таблицы копируется в mdb-файл вместе с DSN-строкой. Вот что можно увидеть в Msysobjects. </p>

Запрос заставляет реактивный двигатель получать данные из SQL Server в соответствии с оптимизацией реактивного двигателя. Поэтому важно обновлять odbc-ссылки всякий раз, когда вносятся изменения в sql-сервер, например, добавление нового индекса index.

Поскольку некоторые таблицы растут, реактивному оптимизатору требуется обновленная статистика, но какой процесс это делает? Это Repair & Compact или обновление ODBC-Links? Можно ли это сделать программно?

Мир

Ice

Ответы [ 3 ]

2 голосов
/ 10 ноября 2009

Самое важное, что JET должен принять хорошая оптимизация решения - это правильные индексы для таблиц. Вы можете проверить, какие индексы видны в JET, открыв связанные таблицы (ODBC) в режиме конструктора и щелкнув значок индексов. Вы получите предупреждение о том, что таблицы доступны только для чтения.

Создание индексов в исходных таблицах, вероятно, будет более эффективным, чем ожидание JET для создания метаданных оптимизации при выполнении запросов.

1 голос
/ 10 ноября 2009

Важно понимать, что только некоторые типы статистики таблиц и метаданные для источников данных ODBC будут иметь отношение к Jet. В общем, я думаю, что индексы - это единственная часть, которая действительно имеет значение с точки зрения того, что Jet решает, что делать с оператором SQL - пока индексы есть и он понимает сервер на другом конце, он будет передавать все к серверу для обработки, если вы не по глупости выбрали или отсортировали выражение, которое не может понять база данных сервера. В этом случае Jet может быть достаточно умным, чтобы отправлять части оператора SQL для обработки сервером (например, объединения и критерии для литералов), а затем использовать набор результатов, возвращаемый с выражением.

Что касается вопроса о связанных таблицах, то, к сожалению, нет динамического способа обновления связанных таблиц ODBC - например, добавить столбец в таблицу или представление, и он не будет в возвращаемой таблице, обновите ссылку и появится новый столбец, но он может быть доступен только для чтения.

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

Для полноты картины я просто дам основы с помощью Jet:

При доступе к Jet компакт должен сбрасывать статистику таблицы, и при следующем запуске каждого оператора SQL компиляция для каждого оператора будет отбрасываться, а план запроса пересчитывается на основе новой статистики. Это важно, если вы сжимаете внешний интерфейс с целью обновления статистики таблиц, а вы сжимаете серверную часть до , то вы сжимаете внешний интерфейс, потому что это гарантирует, что все статистические данные серверной части будут такими же точными насколько это возможно (хотя большинство из них остаются актуальными даже без компактного).

0 голосов
/ 10 ноября 2009

Я уверен, что меня исправят, если я ошибаюсь, но я подумал, что повторное связывание таблиц привело к обновлению статистики. Если это всего несколько таблиц, вы можете использовать встроенный «Менеджер связанных таблиц» для этого. Если нет, то вы можете автоматизировать это в коде, а затем просто запускать эту функцию каждый раз, когда вы хотите обновить статистику таблицы.

У меня есть код, который связывает таблицы доступа с другими путями, и я уверен, что вы можете изменить его для работы со связанными таблицами ODBC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...