当前位置: 代码迷 >> Sql Server >> 按时间分表查询有关问题
  详细解决方案

按时间分表查询有关问题

热度:29   发布时间:2016-04-24 09:22:03.0
按时间分表查询问题
比如1个月一个表,表结构简单 (id,商户号,时间,数量)  表示某个商品某天的销量
那么现在我要查询a月分到b月分的所有商户销量报表 结构如下
商户号,时间,数量

由于数据量大,使用数据分页,一页显示10条, 如果以商户号排序到是很好理解,也很好操作,我可以先在商户表里面查询出要显示哪10个商户,然后再到数据表里面选择这些商户的数据.

但是现在问题来了,如果用户想要通过数量排序来分页呢?怎么办,难道把各个表里面数据查入到一个表里面再来计算分页等等?
求大神支招.

------解决思路----------------------
没太明白,我觉得这个不是问题啊,所以应该是我理解有误

传统的分页可用临时表也可以不用临时表
------解决思路----------------------
建议可以用空间换时间的方法,
单独建一个表用于保存数量汇总的统计结果,并用触发器实时同步数据更新..
需要按数量排序查询时直接调用即可.
------解决思路----------------------
详细一看,还真是我理解错了,你查询的是统计的结果后的数量,这个,只有统计后再去分页了

如果要提高效率,常用的办法是,定时的将一些数据统计后转为化静态。
------解决思路----------------------
错了错了. 不同的表里面有相同的商户啊.得几个表里面汇总的数据才对啊. 
上面的方法全部不适用- -!
------解决思路----------------------
引用:
我找到一个新的方法,大家一起研究一下.

比如我要查询数量从大到小前10条.
那么我先把各个表(条件内)的前10条都查出来,最后取大的10条

如果第二页 就用各表前20条,排序取第二页的数据,这样是不是对的? 

我想了想前10条好像没有问题,那么前20条好像也没有问题.
貌似不行,有这种可能,每个月不在前10的商户,却,在所有月份加起来数量总和在前10里面的情况。
如果你这个统计【商户号,时间,数量】经常用到的话,或者虽然不是经常用到但数量却非常大的话,建议把旧的月份定期统计好存储起来,要查的时候,直接查统计好的,结合最新的,即可。这样只需要实时统计最新的那个月份的数据,这就是2楼的空间与时间的转换的方法。
------解决思路----------------------
你是说,旧的月份的数据也有变的可能性?

处理方式,我觉得可以从几点出发

1、忽略不计,还是按照定时存储旧数据统计结果的方式。考虑的出发点是,一:如你所说可能性比较小,二:一般看统计信息,特别是旧的数据,一般只是想了解个大概,即使有细微的差别,也不会影响决策。用这个方法,可以保证有较高的效率。但是你必须让用户知道旧的数据,可能不是最新的,并可以提供一个主动的,类似刷新旧数据统计为最新的功能。
2、时间上的挪移,每次数据变更的时候,实时加减统计信息,虽然保存的时候麻烦了点,那查询统计时是很方便的。
3、实时统计所有表信息,可以加到临时表,也可以用派生表,把所有表的关注信息UNION ALL到一起,再汇总分页,数据量大的时候,我想应该不可取。
------解决思路----------------------
有多个排序规则的查询的基础数据分表保存没意义吧,每次查询都有把这些表都union一起。
谈谈经验
1、如果数量很大要分很多页,其实用户不会一页页的翻,尽量在一页,实在多就做下载吧
2、如果不愿意改就先读到数组里再排序(用程序实现)
  相关解决方案