Я повторяю вопрос, заданный Mongus Pong. Почему временная таблица будет быстрее, чем вложенный запрос? у которого нет ответа, который работает для меня.
Большинство из нас в какой-то момент обнаруживают, что, когда вложенный запрос достигает определенной сложности, он должен разбиваться на временные таблицы, чтобы поддерживать его производительность. Абсурдно, что это когда-либо может быть наиболее практичным способом продвижения вперед, и это означает, что эти процессы больше не могут быть видны. И часто сторонние BI-приложения будут хорошо работать только с представлениями, поэтому это очень важно.
Я убежден, что должна быть простая настройка плана запросов, чтобы двигатель просто спулировал каждый подзапрос по очереди, работая изнутри. Нет второго гадания, как он может сделать подзапрос более избирательным (что иногда делает очень успешно), и нет возможности коррелированных подзапросов. Просто стек данных, которые программист намеревался вернуть в виде автономного кода в скобках.
Я часто обнаруживаю, что простой переход от подзапроса к таблице # занимает от 120 секунд до 5. По сути, оптимизатор где-то допускает серьезную ошибку. Конечно, могут быть очень трудоемкие способы, которыми я мог бы уговорить оптимизатора смотреть на таблицы в правильном порядке, но даже это не дает никаких гарантий. Я не спрашиваю об идеальном времени выполнения 2 секунды здесь, просто скорость, которую временные табуляции предлагают мне в пределах гибкости представления.
Я никогда не писал здесь раньше, но я писал SQL годами и читал комментарии других опытных людей, которые также просто пришли, чтобы принять эту проблему, и теперь я просто хотел бы, чтобы соответствующий гений сделал шаг вперед и сказал: Особый намек есть X...