数据库视图只是简化数据访问的一种方法,还是在访问视图时提供了性能优势,而不是仅运行视图所基于的查询?我怀疑视图在功能上等同于将存储的视图查询添加到视图数据上的每个查询,这是正确的还是还有其他细节和/或优化发生?
虽然在视图中运行的某个查询和在视图外部运行的同一查询应该等效执行,但是当您需要将两个视图连接在一起时,事情会变得更加复杂.您可以轻松地将不需要的表放入查询中,或者以冗余方式引入表.数据库的优化器可能在创建良好的查询执行计划时遇到更多麻烦.因此,虽然视图在允许更细粒度的安全性等方面可以非常好,但它们不一定有利于模块化.
它取决于RDBMS,但通常没有进行优化,它只是简化查询的简便方法.但是,某些数据库系统使用"物化视图",它们使用缓存机制.
我一直认为Views就像一个只读的存储过程.您可以提前为数据库提供尽可能多的信息,以便尽可能预编译.
您还可以索引视图,以便您可以访问所运行查询类型的数据的优化视图.
通常,视图只是一种创建常用速记的方法,用于定义经常需要的结果集.
但是,有一个缺点.当您想要使用视图时,诱惑是在某些时候添加您认为可能需要的列.所以YAGNI被侵犯了.不仅是列,而且有时候额外的外部联接会被"加以防万一".因此覆盖索引可能不再涵盖,查询计划可能会增加复杂性(并降低效率).
YAGNI是SQL设计中的一个关键概念.