вопросы факторинга подзапроса - PullRequest
1 голос
/ 03 июня 2010

Пожалуйста, объясните.

a) «Факторинг подзапроса» используется для замены некоррелированного подзапроса. Как насчет коррелированного подзапроса? Есть ли способ переместить коррелированный подзапрос в раздел предложения WITH?

b) выполняется ли «подзапрос», «факторинг подзапроса» ровно один раз?

в) "подзапрос" против "факторинга подзапроса", какой из них лучше

Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 июня 2010

Вы можете использовать факторинг подзапроса для замены некоррелированного подзапроса.
Как, черт возьми, вы предлагаете сделать это для коррелированного подзапроса?

Я не понимаю, часть (б), вы можете перефразировать?
Предположим, что вы имеете в виду: подзапрос в предложении WITH обычно выполняется только один раз перед выполнением основного запроса.

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

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

1 голос
/ 03 июня 2010

Под термином «факторинг подзапроса» вы действительно подразумеваете re факторинг с использованием подзапроса? Рефакторинг - это процесс изменения рутины для улучшения обслуживания и читабельности без изменения ее результата. Бывают случаи, когда невозможно преобразовать подзапрос в общее табличное выражение (в предложение «WITH»). Кроме того, не существует золотого правила о том, чтобы всегда использовать CTE или всегда использовать подзапрос (или производную таблицу). Это зависит от данных и СУБД относительно того, какой подход будет работать лучше всего.

...