Почему это предложение WHERE убивает производительность запросов? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть внешний запрос, суммирующий результаты трех баз данных DB2, которые размещены на AS400.Запросы внутреннего объединения выполняются примерно за 2 минуты.Когда я добавляю внешний сводный запрос, производительность не изменяется.Однако добавление предложения WHERE к шагу внешнего суммирования повышает производительность на 10+ минут.Я убивал запрос каждый раз, так как не мог понять, что происходит.Любая идея, почему добавление предложения WHERE кардинально повлияет на производительность?Весь запрос выглядит следующим образом (извините за псевдокод, фактический запрос превышает 700 строк):

SELECT
   field1,
   field2,
   SUM(field3) as my_sum
FROM
   (complex set of three queries with results unioned together from three different databases - runs in about 2 minutes when executed on its own)
WHERE field1 in('string1','string2','string3')
GROUP BY
   field1,
   field2

1 Ответ

0 голосов
/ 17 мая 2019

Почему производительность убийства по пункту WHERE?

Потому что это меняет план выполнения. Вам нужно посмотреть планы объяснения для запроса.

Почему это меняет план выполнения? Поскольку база данных получает представление (ошибочное представление в этом случае), что дополнительная фильтрация делает альтернативный план выполнения лучше.

Что ты можешь сделать? Подсказки являются одним из способов решения этой проблемы, чтобы получить более оптимальный план.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...