![](/user_photo/2706_HbeT2.jpg)
- •Содержание
- •16.1. Направления оптимизации работы с базой данных.
- •16.2. Оптимизация структуры базы данных.
- •16.3. Оптимизация запросов к базе данных.
- •16.3.1. Оптимальная структура индекса.
- •16.3.2. Эффективность использования индекса.
- •16.3.3. Частичное использование составного индекса.
- •16.3.4. Уменьшение общего количества индексов.
- •16.3.5. Многопоточность поиска по or и in.
- •16.3.6. Просмотр плана выполнения запросов.
- •16.4. Оптимизация клиентских приложений.
- •16.4.1. Минимизация соединения с базой данных.
- •16.4.2. Использование tQuery.
- •16.4.3. Перенос тяжести вычислительной работы на сервер.
- •Контрольные вопросы:
16.4.2. Использование tQuery.
Хотя при доступе к таблицам базы данных может использоваться два компонента типа "набор данных" – Ttable и TQuery, для доступа к удаленным данным рекомендуется использовать комнонент TQuery.
ПРИМЕЧАНИЕ. Компонент TStoredProc используется только для работы с вызываемыми процедурами и не применяется для работы с процедурами выбора, которые также могут возвращать наборы данных. Для работы с процедурами выбора также используется компонент TQuery.
Предпочтительность использования TQuery при доступе к удаленным данным определяется следующими причинами:
при доступе к табличным данным компонент TTable считывает все записи удаленной таблицы, в то время как TQuery – ровно столько, сколько нужно для текущих целей визуализации, например, для заполнения сетки TDBGrid; при доступе к таблицам большого объема использование ТТаblе может привести к существенным временным задержкам;
компоненты ТТаblе и TQuery имеют разную природу: ТТаblе ориентирован на навигационный метод доступа к данным, что более характерно для работы с локальными СУБД; TQuery ориентирован на работу с множествами записей, что характерно при доступе к удаленным базам данных в архитектуре "клиент-сервер"; ТТаblе позволяет обратиться к одной таблице базы данных, TQuery – к результатам выполнения запроса одновременно к нескольким таблицам базы данных; соответственно, подтверждение изменений данных в ТТаblе осуществляется для каждой записи, что существенно увеличивает сетевой трафик; изменение данных при использовании TQuery может производиться сразу над множеством записей с использованием операторов INSERT, UPDATE, DELETE;
при помощи компонента TQuery можно выполнять разнообразные SQL-операторы, как возвращающие НД (SELECT), так и не возвращающие его (INSERT, и т.д.).
16.4.3. Перенос тяжести вычислительной работы на сервер.
При работе с удаленными базами данных следует стремиться перенести всю тяжесть вычислительной работы на сервер, по возможности оставив приложению клиента лишь работу по реализации интерфейса с пользователем, отсылки запросов к серверу и интерпретации полученных от него данных.
Не надо обращаться к серверу с запросом необоснованно большого объема данных, на которые приходится накладывать фильтры в самом клиентском приложении.
Следует максимально использовать возможности сервера, памятуя о том, что он может выполнять большинство требований приложения быстрее и оптимальнее и, кроме того, серверу не нужно пересылать данные самому себе по сети.
Реализуйте ограничения на значения вводимых пользователем данных при помощи аппарата ограничений базы данных (CONSTRAINTS), а ссылочную целостность – при помощи триггеров.
Запросы, требующие при своем выполнении ветвящихся или циклических алгоритмов, а также всевозможные вычисления значений, основанные на текущих данных из базы данных, реализуйте при помощи хранимых процедур.
Бизнес-правила, связанные с транзакционными изменениями ряда таблиц, реализуйте при помощи триггеров.
Получайте уникальные значения числовых полей при помощи генераторов.
Повторяющиеся действия, которые могут разделяться различными приложениями и использоваться в SQL-операторах, реализуйте при помощи функций, определенных пользователем (UDF).
Перенос тяжести вычислительной работы на сервер, во-первых, убыстряет работу клиентского приложения, а во-вторых, минимизирует возможность возникновения ошибок.