我不能代表所有数据库,但在 SQL Server 中,除非您有企业版,否则您无法索引视图。未索引的视图在性能方面可能比查询差很多,尤其是当您针对它编写查询以添加一些 where 条件时。索引视图通常可以很好地执行。索引视图还可以针对不同表中的多个字段,这可能会提高临时查询的性能。(可能不是,在性能调优中,您必须始终针对您的特定情况进行测试。)
反对意见的一点是它们不允许在运行时选择 where 条件。通常,您最终会同时获得视图和查询。
视图可以更容易地维护(只需在连接中添加新表,访问财务报告的所有内容都可用),但它们的性能调整要困难得多。这部分是因为它们往往过于泛化,因此比只返回必要的最小值的对应物要慢。是的,正如乔纳森所说,您可以很容易地将报表的视图连接在一起,导致连接到同一个大表的次数比需要的多得多,而且速度非常慢。
视图的两个亮点是: 确保始终正确描述复杂的关系。这就是报告作者倾向于支持他们的原因之一。限制对记录子集的访问
对于视图、即席查询或存储过程可以执行的查询类型也有限制。例如,您不能使用 if 语句(或其他过程类型代码,例如循环),或者如上所述,您不能为 where 条件提供运行时值。
视图通常显着变慢的一个地方是当它们调用其他视图时。底层视图需要在某些数据库中完全实现,因此您可能需要调用 4,459,203 条记录来查看您最终感兴趣的 10 条记录。开始多次分层,它会变得非常慢,非常快;调用视图的视图只是一种糟糕的做法。
在简单的情况下,视图和即席查询在性能方面几乎相同。以至于当您使用视图进行编程时,您应该将其视为视图定义的文本被剪切并粘贴到父查询中。
HLGEM 在他的回答中指出,某些版本的 SQL Server 允许您对视图进行“索引”——在这种情况下,SQL Server 在幕后维护与表相同的结构,使得索引视图和表在术语上非常相似的性能。
在 SQL Server 中,虽然您通常可以相当自由地嵌套视图而不会遇到性能问题,但它会使事情变得更难以理解和调试。
| 归档时间: |
|
| 查看次数: |
23244 次 |
| 最近记录: |