我正在使用 SQL Server 2012
.我有一个 VIEW
叫 MyView
我有 2 T_SQL
从中提取数据的查询 VIEW
.
查询 1 非常简单,如下所示:
SELECT *
FROM MyView
WHERE StayDate >= '2018-03-01'
上述查询在大约 28 秒内执行并返回 151,000 行。
查询 2 如下所示:
SELECT [Col A], [Col B], [Col C], [Col D], [Col E]
FROM MyView
WHERE StayDate >= '2018-03-01'
查询 2 的执行时间不确定。我不得不在大约 8 分钟后取消执行!!
我的问题是我需要将查询 2 用于特定任务。是什么导致了执行时间的这种差异?
VIEW
'MyView' 与其他表有多个连接,还有一些 CASE
内置语句。我认为这个问题与 VIEW
无关。本身,否则两个查询在执行过程中的行为或多或少会相同。我该如何处理这个问题?
最佳答案
当您执行查询时,您的代码将传递给 SQL 查询优化器。它创建执行计划并将其缓存到内存池中。当您再次执行相同的查询时,它会使用该执行计划并更快地检索信息。有时,如果两个查询以相同的执行计划结束,它们都可以使用内存池中缓存的一个。
由于 View 只不过是存储的代码(字面上与您保存和执行 sql 文件相同),因此应该重复使用它。因此,您完全可以期望为 View 提供一些缓存的 EP。
唉,这里不是这样。
关于sql - 为什么来自 VIEW 的 SELECT * 比来自同一个 VIEW 的 SELECT(特定列)执行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49006271/