UserPortals表有200W以上的数据
主要用到表中的一个字段UserGroup int
字段UserGroup 是可重复字段,并且有很大的重复性要执行这样的语句:
select count(*) from UserPortals where UserGroup in(@group)@group是这样的结构(1,3,....101)可能达到上百个需要将这条SQL语句执行50次
请高手赐教

解决方案 »

  1.   

    in(@group) 这样行得通?
      

  2.   

    把UserGroup字段建为聚集索引便可
      

  3.   

    count(*) 
    改成
    count(1) 
      

  4.   

    TO 1 楼打个比方TO 2 楼 
    select   count(*)比select   count(ID)或者任何字段都要快。TO 3 楼能为200W数据建立聚集索引?我还怎么插入内容?请4楼解释一下,好吗?
      

  5.   

    SELECT UserGroup,COUNT(*) AS C INTO TMP_GROUP FROM UserPortals 
    GROUP BY GROUPSELECT SUM(C) FROM TMP_GROUP WHERE UserGroup in(@group)
      

  6.   

    应该把group里的东西放到一个临时表里,
    然后做连接查询杜绝in  like等
      

  7.   

    杜绝in     like等 
    有需求怎么杜绝?-----------
    建议为SELECT UserGroup,COUNT(*) AS C INTO TMP_GROUP FROM UserPortals 
    GROUP BY GROUP
    建立视图或者临时表
      

  8.   

    GROUP  BY  之后的数据放到一张临时表里面了  TMP_GROUP 
    数据量已经非常之小了  在这张临时表里面  IN
    能降低你什么性能啊 
      

  9.   

    应该把group里的东西放到一个临时表里, 
    然后做连接查询 这样应该是比较好的
      

  10.   

    数据库的查询优化技术  
    http://blog.csdn.net/suyiming/archive/2007/11/22/1897606.aspx
      

  11.   

    1、200W还不算海量,表UserPortal有主键吗?UserGroup字段是可考虑建聚集索引,如果该字段在该表最常用;该字段是一定要建索引的,不管是聚集还是非聚集。2、单从效率上来讲,如果能把UserGroup所需的条件值都存到一个临时表里,查询的时候,通过inner join连接,速度应该是最快的。3、如果你IN (...),里面值的个数不多,也可以不用临时表,它的速度也会很快的。 
      

  12.   

    少用in count(*) 效率 低UserGroup上建立索引