日期:2014-05-18  浏览次数:20523 次

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

------解决方案--------------------
distinct 可以用group by 代替 。
count 如果是查询表的条数的话,可以直接从系统表中得到。
------解决方案--------------------
http://topic.csdn.net/u/20120330/19/d10739cd-5e4c-4689-b6ae-38fe4dbb5751.html?18151
这个里面讨论的就是这个问题。
------解决方案--------------------

------解决方案--------------------
啥叫工作原理?
distinct 去重,去重肯定要排序吧,至于排序你懂得,有很多算法的。。。


count distinct 都会用到索引,有没有索引直接影响到你的速度。

这些往往要伴随着一些条件执行,而这些条件也起到很大的影响作用 例如

select count(*) from tb where id>1000 --id 列有聚集索引

select count(*) from tb 
前者的开销要远远小于后者,速度也快,因为前面是index seek 后面就是index scan。
------解决方案--------------------
distinct 无法用其它方法来取代的
和group by 是没有什么区别的


count 如果是cout整个表,可以从系统表里面读取,整个肯定快很多。

SQL code

select rowcnt from sys.sysindexes where id= object_id('ItemCategory') and indid<=1 and OBJECTPROPERTY(id,'IsTable')=1

------解决方案--------------------
原理是什么意思?

distinct 去重复来的。和分组group by意思一样

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