【问题标题】:Difference between select from table directly and view直接从表中选择和查看之间的区别
【发布时间】:2010-10-09 05:14:44
【问题描述】:

直接从表中选择数据或从视图中选择数据有什么区别?
每个人的最佳用途是什么?

【问题讨论】:

    标签: database select


    【解决方案1】:

    根据 Microsoft 的说法,如果您在 sql server 2000/2005/2008 中使用 indexed 视图,会有性能优势。

    索引视图可以通过以下方式提高查询性能
    1. 聚合可以预先计算并存储在索引中,以最大限度地减少查询执行期间的昂贵计算。
    2. 可以预先加入表并存储结果数据集。
    3. 可以存储连接或聚合的组合

    但就像表上的索引一样,视图上的索引也会产生修改开销。因此,只有在运行时提高速度的好处超过更新视图索引所需的时间时才向视图添加索引。

    以下链接提供了更多信息(关于何时使用什么)。

    1. SQL Server 2000/2005 Indexed View Performance Tuning and Optimization Tips
    2. Improving Performance with SQL Server 2000 Indexed View
    3. See performance gains by using indexed views in SQL

    【讨论】:

    • 如果你仔细阅读那篇文章,你会发现它在谈论“物化视图”,它实际上是另一种动物,它真的创造了一种特殊的表格形式。
    【解决方案2】:

    在大多数数据库中,它们在功能上是可互换的(忽略物化视图,无论如何它们是完全不同的东西。)创建视图有两个常见的原因。 1. 一种抽象(和列别名)机制,以及 2. 用于权限和访问控制。但至于效率,这不是问题。

    【讨论】:

    • 不正确。嵌套视图时,某些数据库会出现性能问题。
    • 你有什么参考资料吗?这似乎不太可能,(尽管这就是我说“在大多数数据库中”的原因。)
    • 是的。在 Oracle 中,嵌套视图可能表现不佳。在比较扩展查询与定义为 Oracle 中的多个视图的相同查询时,我们自己也遇到过这种情况。
    • 我会很感兴趣——也很惊讶——看看我们是否能得到任何证实。这将是对任何商业 DBMS 产品的毁灭性指控。
    【解决方案3】:

    这取决于数据库和视图的定义。

    为列起别名或执行简单计算的简单视图与直接进行查询没有区别。

    但是,在某些情况下,视图可能会慢得多。一个例子:在 Oracle 中,如果嵌套视图查询太多(例如,一个视图使用另一个作为表,而另一个视图使用另一个,等等),您可能会产生糟糕的性能。

    一般来说,您需要使用特定的数据库和有问题的查询进行测试。

    【讨论】:

    • 您是否声称使用视图会使您的查询比它所代表的内联子选择慢?
    • 如果效率低下,我敢打赌这是因为视图不恰当地添加了比需要更多的字段和/或连接。但还是和等价的单条 SQL 语句性能一样。
    • 不,我们已经尝试使用 SAME 查询,只是在视图中或在带有子查询的选择中。后者可以快得多。为什么?不知道,甲骨文充满了神秘,而且不是很好。
    • 不,我并不是说浏览量会自动变慢;事实上,它们通常更快,因为它们是预编译的。但不幸的是,现实与复杂观点的理论并不相同。
    【解决方案4】:

    这样想:

    视图只是存在于服务器上并由 SQL 引擎编译的选择语句。

    通常使用视图来限制/简化表格中的结果。

    问候 克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2014-06-12
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多