有人可以向我解释为什么当某人在同一个视图上运行大型查询时,小型查询会在共享视图上花费很长时间吗?
我通过使用表值函数找到了解决问题的方法。
但我想了解为什么在SQL SERVER 2014中共享相同的视图会产生这个问题?
TVF和View查询相同的表格,但为什么TVF会一直运行得更快?
这是实际的执行计划:
答案 0 :(得分:0)
我们需要更多信息才能明确地说出任何内容,但听起来您的小查询正在被阻止"。关系数据库使用"锁定"确保如果您在一个状态下读取数据,则另一个进程无法从您的下方进行更改。在您被允许查看该资源之前,其他查询完全有可能需要完成或回滚。
作为旁注,您可以尝试在较小的查询中添加with (nolock)
提示,看看是否还需要很长时间。该指令基本上绕过了SQL通常用来保持查询ACID-complient的大多数锁。但是我应该注意到,总的来说,离开那里并不是一个好主意,不管你信不信,这些锁实际上有很多用途。无论哪种方式,它都可能是一个有用的投资工具。
您可能会在首字母缩略词ACID上查找一些资源,这是对该主题的更一般描述。