mssql sqlserver sql查询优化处理方法分享之(30秒慢查询优化)


摘要:
下文讲述一次sql慢查询的优化方法分享,如下所示:
实验环境:sql server 2008 R2


前几天同事反馈系统无法正常使用,经过在生产环境中多次跟踪发现,由于sql查询超时导致无法正常的返回可用数据,下文将sql语句记录如下

   ---例:
   --- [maomao_a]表80W行数据
   --- [maomao_b]表1000W行数据
   
   select * from [maomao_a] a left join 
    [maomao_b] as b  on a.keyId = b.keyId 
    where a.keyId in 
    (
        SELECT DISTINCT keyId FROM  [maomao_a]   
        WHERE extendkeyId  IN (99,100,119) GROUP BY extendkeyId HAVING count(keyId) > 8
    )

从上面的例子我们可以看出,首先进行关联查询,然后进行子查询–子查询中还进行相关的群组操作,
—-进行对上面的sql脚本分析:
1.单独进行 a 和 b表的关联查询速度很快
2.单独进行子查询速度也很快

当我们把子查询嵌套到关联查询中时,查询就变得非常慢
———–解决方法—–
我们将子查询单独生成一张数据表C
然后将a和b 生成的结果同数据表C进行关联,达到快速生成数据的效果。