我有一个选择过程,需要很长时间才能完成,大约需要5到10分钟。
我目前不使用NOLOCK作为对MS SQL数据库引擎的提示。
同时,我们还有另一个过程进行更新,并将其插入相同的数据库和相同的表中。
第一个过程已经开始,最近以消息提前结束
SQLEXCEPTION:事务已在另一个进程的锁定资源上死锁,并且已被选择为死锁受害者。
该第一个过程在其他条件相同的站点上运行,但数据库较小,因此,所选择的select语句花费的时间短得多(大约30秒左右)。在这些其他站点中,我没有在这些其他站点中收到死锁消息。我也没有在最初出现问题的站点上收到此消息,但是,我认为,随着数据库的增长,我相信我一定已经超过了一些门槛。这是我的问题:
- 事务执行所花费的时间是否会使关联的进程更有可能被标记为死锁受害者。
- 如果我使用NOLOCK提示执行选择,是否可以解决问题?
- 我怀疑在select语句中作为WHERE子句的一部分检查的datetime字段会导致查找时间变慢。我可以基于此字段创建索引吗?这是明智的吗?