"Этот процесс занимает слишком много времени, поэтому мне нужно его сократить."
Этот процесс состоит из трех подпроцессов:
- Получение> 10 м записей
- Запись записей в файл
- Передача записей по сети (я предполагаю, что вы работаете с локальным клиентом для удаленной базы данных)
Любойили все эти проблемы могут быть узким местом.Таким образом, если вы хотите сократить общее истекшее время, вам нужно выяснить, где оно потрачено.Вам, вероятно, понадобится использовать свой код C # для получения метрик.
Если выяснится, что запрос является проблемой, вам нужно будет его настроить.Индексы здесь не помогут, так как вы извлекаете большую часть таблицы (> 10%), поэтому поможет увеличение производительности полного сканирования таблицы.Например, увеличение памяти, чтобы избежать сортировки дисков.Параллельный запрос может быть полезен (если у вас Enterprise Edition и у вас достаточно процессоров).Также убедитесь, что проблема не связана с аппаратным обеспечением (конфликт шпинделей, хитрые межсоединения и т. Д.).
Может ли запись в файл быть проблемой?Возможно, по какой-то причине ваш диск работает медленно (например, фрагментация) или, возможно, вы конкурируете с другими процессами, выполняющими запись в тот же каталог.
Перенос больших объемов данных по сети, очевидно, является потенциальным узким местом.Вы уверены, что отправляете данные только клиенту?
Альтернативная архитектура: используйте PL / SQL для записи записей в файл на сервере данных, используя массовый сбор для извлечения управляемых пакетов записей, изатем передайте файл туда, где он вам нужен, в конце, через FTP, возможно, сначала сжав его.