EMZETT.
Увійти

Подання SQL: збережені запити як віртуальні таблиці

Коротко: Подання (view) — іменований збережений запит, який можна використовувати як таблицю; він спрощує складні запити й може обмежувати доступ до стовпців.

Докладніше: Замість того щоб знову й знову писати довгий запит із кількома з’єднаннями, ви зберігаєте його один раз як подання (CREATE VIEW). Потім запитуєте SELECT * FROM view_name. Подання зазвичай не зберігає власних даних, а виконує запит за кожного виклику.

Подробиці

Користь

  • Спрощення: складні з’єднання та обчислення в одному місці.
  • Контроль доступу: користувачі бачать лише вибрані стовпці/рядки (наприклад, без стовпця зарплати); права видаються на подання.
  • Стабільний інтерфейс: структура таблиць може змінюватися, а подання зберігає результат незмінним для застосунків.
  • Читабельність звітів.

Матеріалізовані подання

Матеріалізоване подання (CREATE MATERIALIZED VIEW) зберігає результат фізично. Запити стають швидкими, але дані актуальні лише настільки, наскільки останній REFRESH MATERIALIZED VIEW. Підходить для дорогого аналізу (статистика, панелі), якому не потрібна точність до секунди. У PostgreSQL можна оновлювати з CONCURRENTLY без блокування читачів (потрібен унікальний індекс).

Межі

  • Звичайні подання не швидші за вихідний запит; планувальник розгортає їх у запит.
  • Запис через подання працює лише для простих подань (одна таблиця, без агрегації) або з тригерами INSTEAD OF.
  • Вкладені подання швидко стають заплутаними й повільними.
  • Зміни базових таблиць можуть зробити подання недійсними; документуйте залежності.

Погляд іспиту

Подання = віртуальна таблиця у зовнішній схемі трисхемної архітектури. Користь: незалежність даних та захист даних. Протилежність: матеріалізоване подання як кешований результат.

Див. також: З’єднання (join), Планувальник запитів і EXPLAIN, Підзапити та CTE