http://bbs.2ccc.com/topic.asp?topicid=381874 http://bbs.2ccc.com/topic.asp?topicid=561051 http://bbs.2ccc.com/topic.asp?topicid=382302 http://bbs.2ccc.com/topic.asp?topicid=564997 https://github.com/search?q=delphi-coll https://my.oschina.net/mickelfeng/blog/1531377 Murmur2 https://cn.bing.com/search?q=SpookyHash+&qs=n&form=QBRE&sp=-1&pq=spookyhash+&sc=0-11&sk=&cvid=F35A6CBC319442E49DE1D2148FA8F065 http://burtleburtle.net/bob/hash/spooky.html https://github.com/centaurean/spookyhash http://burtleburtle.net/bob/c/lookup3.c http://www.burtleburtle.net/bob/hash/doobs.html http://burtleburtle.net/bob/index.html
数据库一般是b+树,基本上没有hash的。因为hash是无序的,group by 可能一般会有索引吧。
哈希跟排序没关系,哈希是快查用的。
c++里这些数据结构比较多,boost里扩充了不少这样的二叉树结构。
可以存放相同key的一般叫multimap,这个不知道下面的链接能不能满足你的需要了。 http://www.torry.net/tools/developers/compilers/deex091.zip
在10gR2中,sort group by 已经改为hash group by,它先读一条数据,然后求hash并+1,然后处理第二条,如果第二条的hash已经存在累计值,则+1,否则则产生一个新的结果条目并+1.所以hash group by是不需要排序的,毕竟分组后排序并不是需的,很多人在分组后并不要求排序,所以这样对整个系统的性能有好处...
数据库里 hash join 不要太多;特别是1大表和小表关联的时候;
sevencat (七猫)
是的 还是以b+为主,hash查询时间是个常量,但是是散列 应用有局限
另一个感受:
其实数据结构的哈希运算带来很大的效率提升;
通过今天的学习,让我更加感受到了一些辅助结构的效率提升,不是一点点;
这和数据库调优有点类似;
在oracle 数据库里, group by 的实现,在10g以前,是先排序,在分组;
所以得到的据结果总是排好序的;但是效率有时会低;
排序是很伤效率的;
就上面这个例子,20万条记录,用stringList.sorted:=true; 相当于做了快速排序;但是需要8秒的时间,太费时了;
所以oracle 10g之后,可以实现group by 的时候通过hash运算,不进行排序,所以我们看到的结果有时是不排序的,这个就大大实现了效率;至于怎么通过delphi实现不通过排序而group by的效果,我还不会呢;
可以使用jcl里的:jcl.sf.net
或者是dolx里的:http://sourceforge.net/projects/dclx/
新版本的java应该内置了。
|
请发表评论