背景:我有一个性能关键的查询,我想运行,我不在乎脏读。 我的问题是 如果我使用连接,那么我是否也必须指定NOLOCK提示? 例如; 是: SELECT * FROM table1 a WITH (NOLOCK) INNER JOIN table2 b WITH (NOLOCK) ON a.ID = b.ID 相当于: SELECT * FROM table1 a WITH (NOLOCK) INNER JOIN table2 b ON a.ID = b.ID 或者我需要在连接上指定(NOLOCK)提示,以确保我没有locking连接的表?
我在做网站和应用程序不是任务关键 – 例如。 银行软件,太空飞行,重症监护应用程序等等。你明白了。 那么,在这个庞大的免责声明中,在某些Sql语句中使用NOLOCK提示是不是很糟糕? 几年前,一位Sqlpipe理员build议,如果我对“脏读”感到满意,那么我应该使用NOLOCK,这将使我的系统性能提高一倍,因为每次读取都不会locking表/行/不pipe。 我也被告知,如果我遇到死锁,这是一个很好的解决scheme。 所以,我开始思考了几年,直到一个Sql guru帮我一些随机代码,并注意到我的sql代码中的所有NOLOCKS。 我被礼貌地骂了,他试图向我解释(为什么这不是一件好事),我有点失落。 我觉得他的解释的本质是“这是一个更严重的问题的创可贴解决scheme,特别是如果你遇到了僵局。 因此,解决问题的根源“。 我最近做了一些Googlesearch,碰到这个post 。 那么,可以一些sql db guru sensei的请赐教吗?
有人可以解释使用with (nolock)查询的含义,当你应该/不应该使用它? 例如,如果您的银行应用程序具有高交易率和某些表中的大量数据,那么在什么types的查询中,nolock会好起来的? 有什么情况下,你应该总是使用它/从不使用它?