同样的查询语句,在查询分析器中查询,快的时候瞬间,慢的时候几十秒,CPU和内存使用情况都很低。
就是简单的两张表的关键查询,索引也都建了。不过两张表的更新频率比较快。

解决方案 »

  1.   

    我的查询都是用的with(nolock)的。
      

  2.   

    既然有索引,那就可能返回结果多少不一,慢时可能返回结果多导致了表扫描也可能
    在2000,有时连接需要自己指定合并、HASH、循环提示,否则性能也很不好
      

  3.   

    我用了with(nolock)应该不会有锁的问题吧。
      

  4.   


    SELECT text,wait_type,wait_resource,blocking_session_id FROM SYS.dm_exec_requests cross apply sys.dm_exec_sql_text(sql_handle)
    where session_id <> @@spid 
      

  5.   

    nolock本身不会受锁的影响,我觉得可能是update等操作过于频繁影响到了索引,进而影响了查询
      

  6.   

    可能是statistics没更新。
    大表触发统计信息更新的条件是500条更新加上20%的数据量。
    默认设置下,在优化器优化语句时发现统计信息过时,会先更新统计信息在执行语句。
    如果表更新过快的情况下,可以考虑用agent job等手段异步的更新统计信息。另外即使加上nolock也需要上sch-s锁,也可能被alter table阻塞
      

  7.   

    update 是比较频繁,那有什么办法改进吗?
      

  8.   

    update叫频繁可以使用降低索引的填充因子来减少页分裂。内存一般都是自己管理,没必要做太多限制,除非你是32位,如果64位,应该不用担心这些。