Характерные ошибки при решении задач на написание запросов на выборку (SELECT)База данных «Компьютерная фирма»Упражнение 7 стр. 2 |
||
Поправить запрос несложно, достаточно заменить предикат простого сравнения («=») предикатом попадания в список значений (IN):
Заметим, что возможные повторяющиеся здесь пары значений {модель, цена} будут устранены оператором UNION. Однако налицо явная избыточность: в каждом из объединяемых запросов выполняется отбор моделей производителя B. Указанный недостаток можно устранить, сначала выполнив объединение, а затем отбор по производителю:
При этом здесь уже не может быть отбора по типу, однако в этом нет нужды, так как номер модели уникален в таблице Product, то есть один и тот же номер не может принадлежать продукции различных типов. В результате мы получим процедурный план, содержащий 8 операций вместо 12, что имело место в первом варианте решения. Соответственно и время выполнения последнего запроса будет меньше. Предикат IN будет проверяться для каждой записи объединения. Поэтому эффективность выполнения такого запроса будет зависеть от того, как далеко в списке будет находиться искомая модель. Для исключаемых моделей придется просматривать весь список. В конечном итоге время выполнения таких запросов будет тем больше, чем длиннее список (то есть чем больше моделей имеет производитель B). |