现在我遇到一个问题,就是group by消耗性能过大,请问下大家应该怎么优化下这个语句
例:select A from table with(Nolock) where    A in(几千条数据) group by A
其中那个in 几千条由于业务需求,无法避免,我现在想要的效果就是把这几千条数据带到这张表里面去查,然后看看有哪些数据是存在,把这些存在的数据返回给我。

解决方案 »

  1.   

    select A from table with(Nolock) where    A in(几千条数据) group by A
    几千条数据是程序分析的,还是数据库的,或是静态的,都可以调整为Exists查询的。如上面的SQL,使用group by的目的啊,是不是多余了。
      

  2.   

    因为这个表中会存在数据重复的情况,所以想用group by是想排除这种情况
      

  3.   


    为什么不用 distinct ?  后面再换成exist  ,然后看看执行计划
      

  4.   

    一般针对group by的优化就是把group by的列加上索引,但是看你的代码,瓶颈可能在in里面,通常的对于这种写法,把逻辑改成left join更佳,比如:
    1. 创建一个临时表#t,存放in里面的数据,列名为a。
    2. select t1.a from table t1 left join #t t2 on t1.a=t2.a where t1.a is not null 然后针对a列加索引
      

  5.   

    我觉得版主说的好一点,把in的结果集放在临时表中,也可以用with,然后关联此表。
      

  6.   

    In显然要用Exists来替换