视图是否对PostgreSQL中的性能有害?
以下是一本关于数据库设计的书的摘录(Beginning
Database Design ISBN:0-7645-7490-6):
以下是PostgreSQL 9.5文档的摘录:
这两个来源似乎相互矛盾(“不设计与观点”与“设计与观点”). 但是,PG视图是使用规则系统实现的.因此,可能(这是我的问题)对视图的任何过滤都被重写为视图中的过滤器,从而导致针对基础表的单个查询执行. 我的解释是否正确,PG将WHERE子句组合进出视图?或者它是一个接一个地单独运行它们?任何简短,自包含,正确(可编译)的例子?
这本书错了.
从视图中进行选择与运行基础SQL语句完全一样快或慢 – 您可以使用explain analyze轻松检查. Postgres优化器(以及许多其他现代DBMS的优化器)将能够将视图上的谓词下推到实际的视图语句中 – 只要这是一个简单的语句(同样,这可以使用explain analyze进行验证). 关于性能的“坏名声” – 我认为 – 从您过度使用视图并开始构建使用视图的视图的视图开始.通常,与没有视图的手工定制的语句相比,这会导致语句过多.因为不需要一些中间表.几乎在所有情况下,优化器都不够智能,无法删除那些不需要的表/连接,或者在多个视图级别上推送谓词(对于其他DBMS也是如此). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |