database - 查询与 View

标签 database database-design

我想知道查询和 View 在性能方面的区别。如果 View 开销很大,除了查询之外我还能做些什么来提高性能?

最佳答案

我不能代表所有数据库,但在 SQL Server 中,除非您拥有企业版,否则您无法为 View 编制索引。未索引 View 在性能方面可能比查询差得多,尤其是当您针对它编写查询以添加一些 where 条件时。索引 View 通常可以很好地执行。索引 View 也可以针对不同表中的多个字段,这可能会提高临时查询的性能。 (也未必,在性能调优中,你必须始终针对你的特定情况进行测试。)

反对观点的一点是它们不允许运行时选择 where 条件。通常,您最终会得到一个 View 和一个查询。

View 可以更容易地维护(只需在连接中添加新表,访问财务报告的所有内容都可用)但它们的性能调整要困难得多。这在一定程度上是因为它们往往过于泛化,因此比只返回必要的最小值的对应物慢。是的,正如 Jonathan 所说,您很容易将一份报告的 View 连接在一起,变成一团糟,这种情况下连接到同一个大表的次数比需要的次数多得多,而且速度非常慢。

但有两个亮点是: 确保始终正确描述复杂的关系。这就是报告撰写者倾向于青睐它们的原因之一。 限制对记录子集的访问

对于可以为 View 执行的查询类型(即即席查询或存储过程)也有限制。例如,您不能使用 if 语句(或其他过程类型代码,例如循环),或者如上所述,您不能为 where 条件提供运行时值。

View 通常非常慢的一个地方是它们调用其他 View 时。底层 View 需要在某些数据库中完全实现,因此您可能需要调用 4,459,203 条记录才能看到您最终感兴趣的 10 条记录。开始不止一次对此进行分层,它可能变得非常慢,非常快;调用 View 的 View 只是一种糟糕的做法。

关于database - 查询与 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/324177/

相关文章:

mysql - 如何从数据库中获取与发布时间匹配的所有时间?

壁纸的 MySQL 表结构

java - 如何更新数据库,同时在我们的服务器端进行更改

mysql - 如何根据列数据类型和行数计算MySQL表使用的磁盘空间?

sql - 比较两个表中的两个选择

sql - 单个表与两个一对一相关表的性能

mysql - 使数据库中的记录过期的最佳方法/选项是什么?

mysql - 如何设计我的数据库以容纳这些数据

database-design - 选择SQL/NoSQL应该考虑什么?

MySQL(默认+更新时)时间戳