Для: Елена Припихайло
Вы правы. Я совсем забыл еще об несколько способов оптимизации.
Итак, первый:
У меня была ситуация, когда необходимо было хранить информацию о ~130 000 организациях в год. С целью последующего анализа. Реализация была следующая: предприятия хранились в отдельных таблицах по годам.
В этом случае потребовалось реализовывать переход на следующий год и функции формирования имен таблиц. Если бы не нужно было проводить анализ за несколько лет одновременно таблицы хранились бы в раздельных файлах mdb.
Второй:
Уменьшить размер записи в таблицы. Например, за счет переноса полей (особенно, MEMO) в другую таблицу. Оптимизировать размер полей. Например: для поля месяцев хватит размера "Байт". Особенно внимательно необходимо отнестись к текстовым полям.
Третий:
Разбить таблицу на две таблицы. Например, если часть записей заполняются для ограниченного числа записей, то вынести их в отдельную таблицу.
Четвертый:
Удалить не нужные индексы (они могут занимать 50% от размера таблицы, особенно по текстовым полям), а добавить только необходимые, например:
Составные, если часто используется выборка по нескольким полям одновременно.
Добавить индексы по полям, которые используются для объединения таблиц.
Оптимизация индексов увеличит скорость выполнения запросов.
Пятый:
Оптимизация самих запросов. Выбирать только те поля, которые нужны. Уменьшить количество таблиц: например, убрать справочники, их можно подключить на самом отчете. Стараться сделать запрос более селективным - уменьшить объем выбираемых записей при помощи условий отбора. Заменить вложенный запрос в выражении условия на значения, которые он возвращает (если конечно это возмоно). Постараться избежать преобразований типов данных при выполнении запроса: например, текст в число, дата в текст и наоборот. Постараться, использовать только стандартные функции SQL (Sum(), First() и т.д.).
Шестой:
Использование временных таблиц (которые могут распологаться во временной БД). При расчете часть данных можно добавлять во временные таблицы, для дальшейшего расчета. Или для расчета в коде с минимальным использованием запросов. На основании временной таблицы может работать отчет.