有人可以解释一下,如果在SQL查询中使用(NOLOCK)实际上导致它们运行得更快吗?如果是这样,为什么?
短:
我的C#代码中的SQL语句不起作用.with(nolock)打破了代码.
详细:
以下是我的错误和我收到错误的代码.代码应该连接到我的SQL Server数据库(连接代码工作正常)然后运行查询.此查询将获取具有uri"blah"的所有事件的ip地址.这个问题似乎是我with(nolock)要求使用的命令.我必须使用它,因为它是所有T-SQL查询的组标准.
我用谷歌搜索了一段时间,但似乎没有什么适合我的问题,我发现的修复工作还没有成功.任何有关我的代码或链接的帮助将不胜感激.
错误:
System.Data.SqlClient.SqlException被捕获Message =关键字'with'附近的语法不正确.如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则必须以分号终止先前的语句.
Source = .Net SqlClient Data Provider ErrorCode = -2146232060 Class = 15 LineNumber = 1 Number = 319 Procedure =""Server = State = 1
码:
try
{
//create sql reader to display data
SqlDataReader myReader = null;
//create string to enter data into database
string insString = @"select c_ip from @dates with(nolock) where cs_uri like 'blah'";
SqlCommand myCommand = new SqlCommand(insString, DbConnection);
//populate and sanitize parameters
myCommand.Parameters.Add("@dates", …Run Code Online (Sandbox Code Playgroud) 在UPDATE语句中使用NOLOCK:
以下两个查询都运行正常.
UPDATE ml
SET CreationUserId = 'system'
FROM mst_login AS ml WITH (NOLOCK)
WHERE LoginId = 300
UPDATE mst_login
SET CreationUserId = 'system'
FROM mst_login WITH (NOLOCK)
WHERE LoginId = 300
Run Code Online (Sandbox Code Playgroud)
在更新语句中使用NOLOCK的这两种方式有何不同(在性能方面)?
我在 Microsoft SQL Server 2016 上,我有以下(简化的)查询引用视图:
SELECT Column1
FROM dbo.myView
Run Code Online (Sandbox Code Playgroud)
该视图如下所示:
CREATE VIEW dbo.myView
AS
SELECT Column1
FROM dbo.SomeOtherTable WITH (NOLOCK)
Run Code Online (Sandbox Code Playgroud)
我现在的问题是:是否事实外SELECT并没有使用NOLOCK表提示暗示VIEW内NOLOCK是无关紧要的?还是在执行外部 SELECT 时 NOLOCK 仍然相关?
我的问题的更大背景是我有一个案例,我正在分析服务器上的阻塞情况。我发现了一个查询,例如上面描述的 SELECT:一个 SELECT 查询正在使用 VIEW。VIEW 使用了 NOLOCK 表提示,但外部 SELECT 没有使用。尽管如此,该查询仍然是一个阻碍,我正在尝试找出原因。
我已经做了一些研究,我能找到的唯一确认是人们想知道 aNOLOCK是否向下传播到内部表的问题。