Представления только выполняют соединения, что они должны, или все соединения всегда?

Я нахожусь на оракуле DB. Позволяет говорят, что у меня есть одно представление, которое соединяет с тремя таблицами. Представление имеет два поля каждый. Каждому полю только нужны данные из двух из этих трех таблиц.

Если я запрашиваю представление и возвращаю только одно поле, представление все еще соединяет с тремя таблицами или только с двумя таблицами, что оно должно вычислить поле?

1
задан Nate 26 April 2010 в 19:15
поделиться

3 ответа

Обычно он должен попасть в три таблицы. Учтите

SELECT A.VAL, B.VAL, C.VAL FROM A JOIN B ON A.ID = B.ID JOIN C ON A.ID = C.ID

Возможно, что один идентификатор в "A" будет иметь ноль, 1 или несколько совпадений в B или C. Если таблица " C "были пустыми, представление никогда не вернет строку, поэтому даже просто запрашивая A.VAL или B.VAL, все равно нужно будет увидеть, есть ли соответствующая строка в" C ".

Исключение составляют случаи, когда из-за принудительного ограничения ссылочной целостности оптимизатор знает, что строка в 'B' всегда будет иметь родительскую строку в 'A'. В этом случае при выборе B.VAL не нужно будет фактически проверять наличие родительской строки в 'A'. Это продемонстрировано в этой статье

2
ответ дан 3 September 2019 в 01:00
поделиться

Как правило, ядро ​​базы данных объединяет все три таблицы, чтобы гарантировать получение правильного ответа.

Oracle иногда удаляет одну из таблиц, если это не меняет результат.

Это может быть сделано, если: -

  • Существует ограничение внешнего ключа для таблицы, которую необходимо исключить (т. Е. Можно гарантировать, что строка в таблице будет найдена)

  • Таблица является в остальном не используется. т.е. не выбран из, в предложении where и т. д.

0
ответ дан 3 September 2019 в 01:00
поделиться

Это зависит от типа используемого объединения. Если все они являются внутренними соединениями, то определенно потребуется исследовать все три таблицы.

0
ответ дан 3 September 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: