相关疑难解决方法(0)

证明在每个查询中不使用 (nolock) 提示

您是否曾经不得不证明不使用查询提示是合理的?

WITH (NOLOCK)在每个访问非常繁忙的服务器的查询中都看到了。开发人员认为它应该默认开启,因为他们讨厌在他们的代码中看到它数千次。

我试图解释说它允许脏读,最终它们会得到坏数据,但他们认为性能权衡是值得的。(他们的数据库一团糟;难怪他们有性能问题。)

如果你有一个明确的例子来说明如何反对这种滥用NOLOCK提示的情况,那将不胜感激。

sql-server locking nolock

23
推荐指数
3
解决办法
4972
查看次数

使用复杂 where 子句对 10M 行进行查询的性能

我们有一个查询会在运行时破坏我们的生产服务器。

它是报告功能的一部分,不好的部分如下所示:

SELECT DISTINCT 
    mt.ID           AS ID
FROM 
    [dbo].[MyTable]    mt
WITH (NOLOCK)
WHERE           
    (@aVariable           IS NULL 
      OR (CONVERT(VARCHAR(22), mt.Date1, 112) >= CONVERT(VARCHAR(22), @date1, 112))
    AND (@status            IS NULL 
    OR @status <> 2 
    OR  (   @status = 2 
        AND (  SELECT COUNT(*) 
               FROM 
               MyTable mt2
               WITH (NOLOCK)
               WHERE 
                  mt2.CaseID = mt.CaseID 
                  AND mt2.Date1 > mt.Date1
             ) = 0
        )
    )
    AND (@aSecondVariable IS NULL 
           OR (CONVERT(VARCHAR(22), mt.Date1, 112) <= CONVERT(VARCHAR(22), @date1, 112)))
    AND (@aThirdVariable  IS NULL 
           OR (CONVERT(VARCHAR(22), mt.Date2, 112) >= …
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2008 sql-server query-performance

2
推荐指数
1
解决办法
2993
查看次数