Ваш запрос возвращает около 10% строк таблицы.Он выбирает несколько столбцов по всей строке.Если предположить, что опубликованные примеры данных являются репрезентативными, данные не объединяются, и выбранные строки будут поступать со всей таблицы.
Так что индексация вам не поможет.Вам нужно полное сканирование таблицы.
Запустите план объяснения по вашему запросу, чтобы убедиться, что вы его используете.Если по какой-либо причине вы используете какую-либо форму индексированного чтения, то исправьте это (например, обновив устаревшую статистику).Кроме того, существует не так много способов настроить полное сканирование таблицы: если у вас есть Enterprise Edition и доступно несколько процессоров, параллельный запрос может помочь.
Но давайте вернемся на минуту назад.
«Мой запрос возвращает около 10 миллионов строк, но его выполнение занимает около 30 минут».
Где узкое место?Почти наверняка не база данных.10 миллионов строк по ~ 20 столбцов - это большой объем данных, но полное сканирование таблицы на одну таблицу должно выполняться за пару минут, если не намного меньше (в зависимости от работоспособности вашего сервера).
Скорее всего, это будет сеть (если вы не выполняете этот запрос локально, то есть клиент pandas находится на сервере базы данных).Вы передаете много-много пакетов по сети.Возможно, вы работаете с ограничением доступной пропускной способности, поэтому поговорите со своей командой сетевого администратора (или установите wireshark !).Если проблема связана с задержкой в сети, проверьте, помогает ли настройка pd.read_sql() chunksize
.
Другая вещь, которую следует учитывать, - это клиентская память: кадры данных являются структурами в памяти, поэтому вы можете загружать больше данных, чем может обработать клиент.Поможет все, что вы можете сделать, чтобы уменьшить общий объем выбранных данных.Пересмотрите проекцию запроса и удалите все столбцы, которые вам не нужны для последующей обработки.
'Команда EXPLAIN PLAN FOR ничего не возвращает'
EXPLAIN PLAN заполняет таблицу. Узнайте больше .Вам нужно запросить таблицу, чтобы получить план.Встроенный пакет DBMS_XPLAN - ваш лучший друг здесь. Проверьте это .Некоторые IDE (например, PL / SQL Developer) обрабатывают это прозрачно.