日期:2014-05-17  浏览次数:20410 次

如果数据量很大的话,怎么拿到某条纪录在结果集中的精确位置?
对某表进行统计排序,用来排序的条件在数据表中是存在相同的值的,要求找到排序后的结果集中某条独一无二纪录(主键已知)在结果集中的位置,也就是序号。这个问题的难点在于,当表中的数据并不多的时候,外部程序只需要把数据全部取出到一个list或者dateset中,然后遍历找到目标就可以了,但是当表的数据到达百万行甚至千万级别的时候,你不可能把这些数据全取出来遍历一遍。我想问问日常你们怎么处理怎么问题的,对了,不能用数据库自己独有的统计功能,我知道sql server有一个row_number group by,但是这个功能没法用到别的数据库去,有用最普通的sql语句就能解决这个问题的方案吗

------解决方案--------------------
首先数据量到这么大了 必须分页来处理。其次,排序是最好的方式,不管是程序生成排序还是数据库来生成序号
------解决方案--------------------
哦,我觉得这个最好还是用数据库自己的功能吧,像这个row_number函数一般的大型数据库都有,比如sql server、oracle、db2都有的,mysql好像没有的。

不可能说是,直接把几千万条记录直接放到缓存,那你的缓存肯定不够的。

你要是像自己用程序实现,要实现估计只能先计算出结果集,然后把结果集放到应用端的缓存中,然后在排序编号,或者考虑分页,把结果分成很多份,要用那一份,获取数据后再排序。

总之就是,结果集要尽量小,然后再排序。

------解决方案--------------------
实时排序功能在任何一个数据库中都是在消耗功能,你这个问题明显是没做过的设想问题,大家都在千方百计避免出现这种需求。