Использование функций в объединениях не будет использовать индексы. Вместо этого вы можете сделать это (предполагая, что tbl_data - это таблица с временными частями в ее данных):
SELECT *
FROM tbl_data, tbl_calendar
WHERE tbl_data.TRXdate >= tbl_calendar.TRXdate
AND tbl_data.TRXdate < tbl_calendar.TRXdate + 1
При этом будут использоваться индексы с обеих сторон (хотя не обязательно для обоих критериев).
Причина, по которой не используется оператор BETWEEN / AND, заключается в том, что многие движки баз данных обрабатывают второй аргумент как включающий, поэтому он даст вам два дня вместо одного.
Более умозрительные предложения:
ADO позволяет создавать виртуальные индексы для наборов записей, поэтому в зависимости от того, что вы пытаетесь сделать здесь, вы можете ускорить его, создав виртуальный индекс для вычисляемого поля, Int (tbl_calendar.TRXdate) , Я никогда этого не делал, просто знаю, что это возможно.
некоторые механизмы баз данных позволяют создавать виртуальные индексы для представлений. В SQL Server это называется индексированным представлением и позволит вам создать представление с индексированным выражением Int (tbl_calendar.TRXdate).
временные таблицы на стороне сервера также могут быть решением, но способ работы индексированных представлений скорее устраняет необходимость в этом, поскольку он сохраняет индексированное представление в виде таблицы.
В зависимости от другой базы данных индексы могут использоваться или не использоваться. Насколько эффективно они будут использоваться в гетерогенном соединении, будет зависеть от задействованных механизмов db и от того, какой из них вы используете для выполнения SQL SELECT. Если, например, на стороне сервера находится SQL Server, возможно, вы получите более высокую производительность, запустив его из SQL Server с файлом данных Jet / ACE в качестве связанного сервера. Мое предположение состоит в том, что есть оптимизация именно для такой ситуации, которая, вероятно, сделает ее более эффективной из SQL Server, чем из Jet, но вам нужно проверить, чтобы быть уверенным.
другой вариант - заполнить временную таблицу в базе данных Access, которая имеет два столбца: PK из таблицы на стороне сервера и значение Int (tbl_calendar.TRXdate), рассчитанное на основе данных сервера. Если вы проиндексировали это, вы получите довольно хорошую производительность при выборе данных Jet / ACE. Но если вам нужно вернуть данные на стороне сервера, вы, вероятно, не получите столь же хорошие результаты, но это может быть лучше, чем любая из перечисленных выше альтернатив.