当其他人在同一视图上运行大查询时,对共享视图的小查询需要很长时间

时间:2018-03-23 19:27:02

标签: sql-server views sql-server-2014

有人可以向我解释为什么当某人在同一个视图上运行大型查询时,小型查询会在共享视图上花费很长时间吗?

我通过使用表值函数找到了解决问题的方法。

但我想了解为什么在SQL SERVER 2014中共享相同的视图会产生这个问题?

TVF和View查询相同的表格,但为什么TVF会一直运行得更快?

这是实际的执行计划:

JavaMail FAQ also covers that

1 个答案:

答案 0 :(得分:0)

我们需要更多信息才能明确地说出任何内容,但听起来您的小查询正在被阻止"。关系数据库使用"锁定"确保如果您在一个状态下读取数据,则另一个进程无法从您的下方进行更改。在您被允许查看该资源之前,其他查询完全有可能需要完成或回滚。

作为旁注,您可以尝试在较小的查询中添加with (nolock)提示,看看是否还需要很长时间。该指令基本上绕过了SQL通常用来保持查询ACID-complient的大多数锁。但是我应该注意到,总的来说,离开那里并不是一个好主意,不管你信不信,这些锁实际上有很多用途。无论哪种方式,它都可能是一个有用的投资工具。

您可能会在首字母缩略词ACID上查找一些资源,这是对该主题的更一般描述。

https://en.wikipedia.org/wiki/ACID