Эксперты могут поправить меня по этому поводу.
Я не мастер читать операторы EXPLAIN, но я могу вырезать и вставить SQL очень хорошо, и я могу довольно хорошо читать секундомер.
Я здесь, чтобы сказать.
Встроенные представления, даже простые, могут внести СЕРЬЕЗНУЮ боль в скорости выполнения.
Я только что ответил на свой вопрос, работая с представлением G то есть (или было) что-то похожее (используя мою аналогию A, B, C, изложенную в OP), выбор из представления F, который использует E ... до A.
Выбор результатов для одна отфильтрованная строка занимала слишком много времени - порядка 500 мсек.
Я уменьшил это время до 200 мс, уменьшив количество дополнительных таблиц, захватываемых по ходу. Никакого шока, что я там кое-что приобрел. Немного шокирует, увидев, сколько.
Но затем я уменьшил эти 200 мс до 7 мс, заменив представление G на использование представления B и вместо этого используя конструкцию B как часть представления G. существенно сложнее для чтения, но потрясающе эффективнее.
Вот и все, что нужно для абстрагирования от общих объединений.
Итак, это ответ на мой первый вопрос решительным НЕТ! В PostgreSQL представление, использующее вложенные представления, может быть шокирующе МЕНЬШЕ эффективным, чем логически эквивалентное представление, которое вообще не использует вложенности.
Мой вывод: если производительность падает, НЕ предполагайте, что ваши вложенные представления невиновен. Они могут ОЧЕНЬ вероятно причинить вам боль.
Плохо.
PS Я начинаю понимать, как читать результаты EXPLAIN. Кикер состоит в том, что вложенное представление объясняется следующим образом ...
-> Hash Join (cost=20902.62..28364.33 rows=1 width=1018)
(actual time=878.007..1092.339 rows=0 loops=3)
Hash Cond: (mi.mft_item_id = ri.mft_item_id)
, тогда как мое мнение, которое избегает использования вложенного представления, сняло это ...
-> Index Scan using mft_items_pkey on mft_items mi
(cost=0.42..8.44 rows=1 width=187)
(actual time=0.024..0.024 rows=1 loops=1)
Index Cond: (mft_item_id = ri.mft_item_id)
Postre SQL не использовал желаемые индексы, когда я объединил два представления вместе.