Osc*_*car 12 postgresql union database-design tableview
我正在创建一个具有一些复杂底层关联的Web应用程序.为了解决我遇到的几个问题,我创建了一个UNION View.可能有很多其他方法可以解决.
但我现在正在考虑我的设计的效率,我想知道每次查询时是否新创建了一个VIEW,或者它是否只创建一次,并保持更新.
详细说明,如果我有table_a(100条记录)和table_b(100条记录)并制作UNION视图,那么我创建了一个包含200条记录的视图.
每次我对View进行选择时,是否会发生这整个过程?
同样,显然每次更新基础表记录时视图都会更新,但是视图是否更新了这一条记录,还是从头开始重新创建整个视图?
戴尔
Rob*_*cke 15
视图只不过是带有名称的查询.有可能与性能相关的优化,一些DBMS比其他更好地实现(pgSQL似乎更好),如重用查询计划,缓存访问控制等.
但是,在他们的一天结束时,几乎总是,您可以期望视图的行为就像直接发布SQL一样.区别在于您可以授予对此查询的访问权限,而无需授予对基础表的访问权限.
你可以做的优化可以改变行为(使它们像半桌一样),并且pgSQL可能存在或者可能不存在,如物化视图(对不起pgSQL),但这只是挑剔.
使用 EXPLAIN 查看 VIEW 是如何执行的,您将看到与普通查询相同的结果。
EXPLAIN
SELECT * FROM name_of_your_view WHERE foo = 23;
Run Code Online (Sandbox Code Playgroud)
PostgreSQL 将尝试优化内部查询,即使当您加入视图、拥有使用其他视图的视图等时。尽量避免在优化器完成它的(伟大的)工作之前必须执行 VIEW 的情况。使用内部嵌套视图时,聚合、ORDER BY 和 LIMIT 是潜在问题的示例。只需使用 EXPLAIN 来查看发生了什么。