distinct 与 count的工作原理
请教一下,distinct 与 count的工作原理是什么
有没别的语句比distinct 的效率高,但能达到同样的效果?
有没别的语句比count的效率高,但能达到同样的效果?

解决方案 »

  1.   

    distinct 可以用group by 代替 。
    count 如果是查询表的条数的话,可以直接从系统表中得到。
      

  2.   

    http://topic.csdn.net/u/20120330/19/d10739cd-5e4c-4689-b6ae-38fe4dbb5751.html?18151
    这个里面讨论的就是这个问题。
      

  3.   

    啥叫工作原理?
    distinct 去重,去重肯定要排序吧,至于排序你懂得,有很多算法的
    count distinct 都会用到索引,有没有索引直接影响到你的速度。这些往往要伴随着一些条件执行,而这些条件也起到很大的影响作用 例如select count(*) from tb where id>1000 --id 列有聚集索引select count(*) from tb 
    前者的开销要远远小于后者,速度也快,因为前面是index seek 后面就是index scan。
      

  4.   

    distinct  无法用其它方法来取代的
    和group by 是没有什么区别的
    count 如果是cout整个表,可以从系统表里面读取,整个肯定快很多。
    select rowcnt from sys.sysindexes where id= object_id('ItemCategory') and indid<=1 and OBJECTPROPERTY(id,'IsTable')=1
      

  5.   

      原理是什么意思?distinct 去重复来的。和分组group by意思一样count是你查询结果的条数。
      

  6.   

    例如,distinct是按照asc II码进行排序的,排序之后是如何去掉重复的呢?
    count 不是遍历全表的时候,就没更加高效的方法吗?
    这两个东东经常用到,但是比较占资源,为了节省资源,常常不得不在前台做大量的工作来弥补。