a_info 被其它会话更新中、有锁定,子查询有比较多的等待。

解决方案 »

  1.   

    可能原因:
    1、阻塞,即有其他会话在修改这个表的这部分数据,导致锁住数据。这种情况下,如果频繁发生,尝试加with nolock检测,如果加了就很快,那问题基本上是这个了。
    2、数据分布不平均,到时索引上的统计信息不准确,对于非常大的表(没有标准),统计信息的更新阈值较高,500+(表总数的)20%才触发更新,这个可以手动更新一下表或者索引的统计信息(索引的更新直接重建索引即可),再进行查询,如果很快,那问题可能是这个。
    常见的问题就这两个,还有一些比较啃爹的比如做了分区,而分区的数据刚好在别的文件组,这个文件组又在比较慢的盘上,或者索引碎片等问题,问题很多,最好对比一下快慢两次查询的执行计划
      

  2.   


    --建议改成:
    SELECT t1.userid
    FROM a_info t1 (NOLOCK) 
    LEFT JOIN yh_info t2 (NOLOCK) ON t1.UserID=t2.UserID
    WHERE t1.syear=2015
      

  3.   


    版主提醒了我,原来在去年年底把原来sql2000移到 sql2005上所以会出现这个问题,我把所有的索引删除了,然后重新建索引就好了。但mdb文件却大了很多,不知有什么影响?
      

  4.   


    今天正好在京东上买书看到黄大师的书《SQL Server 性能优化与管理的艺术》,看了介绍很好,买下,希望能从你的著作中学到你的精髓。
      

  5.   

    楼主这样呢?
    select a.userid FROM a_info a where syear='2015'  
    and exists(select 1 from yh_info b where a.UserID=b.UserID )