Я использую около 40 таблиц, запрошенных с помощью запроса Microsoft Excel в Excel.Они устанавливают разные соединения, но строка соединения одинакова.Все запросы select * from x
.x
в данном случае - представление oracle db.Я проверил время выполнения с помощью скрипта Visual Basic: Соединение с данными ODBC для Excel Время запроса, необходимое для обновления каждого запроса
В среднем соединение, показанное vba, в 4 раза медленнее, чем непосредственное выполнение представленийв базе данных с использованием datagrip.Таким образом, в общей сложности требуется 25 секунд, чтобы обновить всю книгу Excel, что совершенно неприемлемо.Чтобы привести пример конкретного представления, если для Datagrip требуется 85 мс, в Excel требуется около 350 мс (это после использования материализованных представлений, как описано ниже).
Быстрая загрузка данных в Excel уже выбрана.Запросы не зависят друг от друга, поэтому нет одного и того же соединения или запроса, вызываемого несколько раз.Нет никаких преобразований в данные, поэтому сворачивание запросов (детали которых я не читал) не должно быть проблемой.
Я также создал материализованное представление.Это уменьшило задержку в Excel (например, от 1,5 с до 1,15 секунды или от 600 до 350 мс для двух примеров просмотра).Однако улучшение в datagrip (4x) намного больше, чем в Excel (1,5x-2x), и это не связано с кэшированием в datagrip (кэширование сокращается на 85 мс до 30 мс).
Общий файл Excel с даннымисоставляет всего около 1,5 МБ.
Какие еще методы я могу использовать для улучшения времени обновления в Excel?
Я бы хотел сократить до 4-5 секунд.Как крупнейший запрос / просмотр имеет 4000 строк.Еще 2 просмотра имеют около 100-200 строк, а другие содержат в среднем 10x20 таблиц.Некоторые еще меньше.