Я получил смехотворно массивный запрос, сгенерированный веб-аналитикой бизнес-объектов к базе данных сервера SQL для бюджетной системы. Разработчик отчетов создал этот запрос в графическом интерфейсе и обнаружил, что он никогда не выполняется. Я позволил ему работать прошлой ночью, и он работал в течение 7 часов, прежде чем наши серверы перезагрузились для обновления Windows.
Я взглянул на план объяснения в sql и обнаружил несколько предупреждений на нескольких шагах «Вложенные циклы (внутреннее объединение)» - два из этих предупреждений переходят с третьего на последний шаг. Предупреждение «Нет предиката присоединения».
Другое замечание, которое я имею по этому поводу, заключается в том, что запрос содержит это в предложении where:
BF_FUND.CD IN ('0105','0101')
Если вы поместите туда только один код фонда, он будет работать нормально - так что, добавив второй код, мы получим картезианское представление (возможно, это то, что произошло бы без предиката соединения).
Любые рекомендации о том, как отследить это? 790 строк замечательного SQL, чтобы пройти через ничего, кроме соединения после объединения.
Может ли план объяснения указывать на конкретную область?
Спасибо за вашу помощь.
редактирует:
Невозможно опубликовать запрос, вопрос безопасности, и его слишком много, чтобы запутать. И я бы не хотел, чтобы кто-то на это смотрел.