Подготовленный SQL-запрос против расширяющегося фильтра WHERE - PullRequest
0 голосов
/ 14 ноября 2018

Я работал с R, взаимодействуя с моей базой данных Oracle с помощью пакета DBI. Я читал, что подготовка запроса часто является хорошей практикой при попытке запросить один и тот же статус в разное время.

Мой вопрос заключается в том, что, принимая во внимание бесконечную оперативную память для загружаемых данных, какие факторы могут влиять в разное время выполнения между двумя сценариями: выполнение подготовленного запроса N раз или использование фильтра WHERE ... BETWEEN?

Допустим, мне нужно выполнить запрос для анализа некоторой информации о временных рядах между 2012 и 2018 годами. Я обнаружил разное время загрузки между выполнением подготовленного запроса для каждого месяца между окном анализа и простой фильтрацией всего окна.

1 Ответ

0 голосов
/ 15 ноября 2018

Это зависит от того, как база данных оптимизирует ваш запрос.Может быть, он выбирает оптимизацию с индексом при выборе только одного месяца, может быть, он решает использовать полное сканирование таблицы для извлечения всего окна сразу.

Обычно я ожидаю, что запрос получит весь набор данных водин раз, чтобы быть более эффективным, чем разбивать его на несколько частей в месяц.

Факторы, которые играют роль, среди прочего:

  • Какой процент строк в таблице вы используете?
  • Существуют ли индексы, которые можно использовать?
  • К каким данным недавно обращались (и они могут быть кэшированы)?
  • Сколько данных может обрабатывать / кэшировать база данных в памяти?
  • Использовали ли вы переменные связывания для операторов?
...