【发布时间】:2018-02-21 11:47:16
【问题描述】:
我想询问在 SQL 2012 及更高版本中使用视图时的性能。假设我有一个涉及多个连接等的复杂查询。假设由于查询的复杂性和记录的数量,这个查询需要 10 分钟才能执行。
我希望为最终用户提供一个简单的“表格”来使用,因此我选择使用上面的查询创建一个视图。我喜欢使用视图的概念,因为据我了解,您不会复制数据,而是创建一个“虚拟表”,它只是引用存储数据的位置。与使用相关数据创建第二个物理表相比,这显然是有效的。但我担心性能。
如果用户希望使用视图选择此数据的子集,是否需要先运行整个查询来创建视图,然后从该视图中提取所需数据的子集?换句话说,对于最终用户来说,他们会花 10 多分钟的时间来获取他们需要的数据吗?
【问题讨论】:
-
这完全取决于视图。从简单的视图来看,逻辑处理的顺序不太可能改变,但这也意味着视图上的
WHERE子句可能会导致语句运行得更快;由于大量数据被过滤。对于编写不佳或复杂的视图,逻辑处理的顺序可能会发生变化,这意味着可能必须首先解析查询的某些部分(而那些是缓慢的部分)。这也不意味着复杂的 View 不能快(或简单的慢)。找出答案的最好方法是测试。
标签: sql sql-server sql-server-2012 sql-server-2014 sql-server-2016