已经做了索引,但是速度还是慢的很。count100W需要11秒左右!比读去100W数据还慢!

解决方案 »

  1.   

    1、为字段 name 创建索引;
    2、将SQL语句改为: select count(name) from table1 where name='xx' 
      

  2.   

    其实count(name) 和count(*)是一样的,有时候甚至比count(*)还要慢呢。
      

  3.   

    晕哦,你没说清楚是什么数据库啊,你说的是mysql吧,如果是mysql的话,只有在innob的格式下,做索引才有用的,如果把myisam格式的话是没有用的。我一开始以为你说的是sql server呢。
      

  4.   

    keenx(老刀) ( ) 信誉:95 
    晕哦,你没说清楚是什么数据库啊,你说的是mysql吧,如果是mysql的话,只有在innob的格式下,做索引才有用的,如果把myisam格式的话是没有用的。
    -----------------------------------------这是哪来的理论?
      

  5.   

    感觉在count(*)计算后索引没什么用啊?
      

  6.   

    其实还得看name是什么类型的数据
      

  7.   

    不会吧,count(*)是最快的了,200万不算多啊
      

  8.   

    5zero(秋风) ( ) 信誉:100  2006-07-14 11:02:00  得分: 0  
     
     
       order by 可否做索引??
      
     
    --------------------------------------------可以
      

  9.   

    索引只能帮助你快速的找到name=xx的开头。如果你name=xx的记录有100w,那么有索引依然要遍历100w记录,遍历这么多数据再快也是秒级的。对于有大量同名的计数只能在insert、delete时自己维护一个计数器。
      

  10.   

    select count(1) from table1 where name='xx'
    再看,这下肯定会快起来的
      

  11.   

    yibotiemen(易通) ( ) 信誉:100  2006-07-16 19:42:00  得分: 0  
     
       select count(1) from table1 where name='xx'
    再看,这下肯定会快起来的
    -------------------------果然快得飞起了。我测试了2百万记录。开机第一次花了39秒。然后的都是1,2秒。真快啊真快啊真快啊,真快啊  
     
      

  12.   

    对一个大表。count只应用于全表的情况。有where时都不应该用count。
      

  13.   

    除非你确定where出来的结果不会太大。