Оптимизация запросов в Jet — процесс довольно сложный, но это не значит, что в нем невозможно разобраться. Ниже приведены советы, которые помогут ускорить выполнение запросов:
• Рекомендуется создавать индексы для всех полей, которые будут использованы для определения критерия отбора.
• Необходимо создавать индексы с обеих сторон связей в запросах.
• Вместо уникальных индексов лучше пользоваться начальными значениями. Поскольку начальные значения запрещают использование пулевых значений, запрос может использовать преимущества большего количества типов объединения.
• В результирующем наборе не следует отображать
какие-либо лишние столбцы. Обработка и отображение каждого столбца занимает дополнительное время.
• Рекомендуется воздерживаться от употребления сложных выражений в запросах.
• Следует избегать функции IIF() (немедленное IF). IIF() оценивает и истинное, и ложное значения перед тем, как выдать результат. Если выполнять данную операцию для каждой записи, это может сильно повлиять на производительность.
• При использовании вложенных запросов рекомендуется записывать все вычисления в последнем запросе серии.
• Вместо Count([Customer]) лучше применять Count(*),
поскольку при срочной оптимизации Count(*) обрабатывается быстрее — перед подсчетом не нужно проверять нулевые значения.
• По возможности следует пользоваться оператором Between для уменьшения количества строк в результирующем наборе вместо операторов "больше чем" и "меньше чем".
• Обычно размещение условия со стороны "один" отношения "один-ко-многим" — самый эффективный способ, но не всегда. Можно попробовать передвинуть ограничение к стороне "многие", чтобы проверить, не изменится ли производительность. После каждого изменения условий отбора необходимо тщательно проверять результирующий набор.
• Нормализованные таблицы могут хранить данные с использованием меньшего количества страниц данных и страниц индекса. Нормализация должна стать правилом, и нарушать ее можно лишь при отсутствии другой альтернативы.