按时间分表查询问题

gw6328 2015-03-02 05:41:44
比如1个月一个表,表结构简单 (id,商户号,时间,数量) 表示某个商品某天的销量
那么现在我要查询a月分到b月分的所有商户销量报表 结构如下
商户号,时间,数量

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

但是现在问题来了,如果用户想要通过数量排序来分页呢?怎么办,难道把各个表里面数据查入到一个表里面再来计算分页等等?
求大神支招.
...全文
382 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gw6328 2015-03-09
  • 打赏
  • 举报
回复
结了吧.这些功能同需求人员有关系,他们认为数据必须要一定准确才行,甚至要查几年的数据都要精确. 然后他们又要性能好,世间难得两全法啊. 楼上10#,2#思想都可能,但是具体公司里面操作不一样.没办法. 现在我基本是决定第一版不让他们排序,只按一种排序方式来取,可以解决这种问题. 如果客户非要排序,我只能用union 或者放入临时表处理,但是这里注意,分表是存在意义的,不是单纯的将几个表 select * from t1 union all select * from t2,而是存在先汇总的情况,也就是select c1,c2 from t1 group by c1 然后union all 或者是放入临时表,等几个表处理完了再汇总记录,这里表也要注意粒度吧.现在我们是3个月一张表吧.
还在加载中灬 2015-03-03
  • 打赏
  • 举报
回复
你是说,旧的月份的数据也有变的可能性? 处理方式,我觉得可以从几点出发 1、忽略不计,还是按照定时存储旧数据统计结果的方式。考虑的出发点是,一:如你所说可能性比较小,二:一般看统计信息,特别是旧的数据,一般只是想了解个大概,即使有细微的差别,也不会影响决策。用这个方法,可以保证有较高的效率。但是你必须让用户知道旧的数据,可能不是最新的,并可以提供一个主动的,类似刷新旧数据统计为最新的功能。 2、时间上的挪移,每次数据变更的时候,实时加减统计信息,虽然保存的时候麻烦了点,那查询统计时是很方便的。 3、实时统计所有表信息,可以加到临时表,也可以用派生表,把所有表的关注信息UNION ALL到一起,再汇总分页,数据量大的时候,我想应该不可取。
gw6328 2015-03-03
  • 打赏
  • 举报
回复
现在我感觉没有办法了.可能每个表都要汇总,然后再到一个表里面统计. 因为这个数据也不是完全静止的,可能变动,只是变动的可能性很小- -!
还在加载中灬 2015-03-03
  • 打赏
  • 举报
回复
引用 4 楼 jinfengyiye 的回复:
我找到一个新的方法,大家一起研究一下. 比如我要查询数量从大到小前10条. 那么我先把各个表(条件内)的前10条都查出来,最后取大的10条 如果第二页 就用各表前20条,排序取第二页的数据,这样是不是对的? 我想了想前10条好像没有问题,那么前20条好像也没有问题.
貌似不行,有这种可能,每个月不在前10的商户,却,在所有月份加起来数量总和在前10里面的情况。 如果你这个统计【商户号,时间,数量】经常用到的话,或者虽然不是经常用到但数量却非常大的话,建议把旧的月份定期统计好存储起来,要查的时候,直接查统计好的,结合最新的,即可。这样只需要实时统计最新的那个月份的数据,这就是2楼的空间与时间的转换的方法。
yooq_csdn 2015-03-03
  • 打赏
  • 举报
回复
有多个排序规则的查询的基础数据分表保存没意义吧,每次查询都有把这些表都union一起。 谈谈经验 1、如果数量很大要分很多页,其实用户不会一页页的翻,尽量在一页,实在多就做下载吧 2、如果不愿意改就先读到数组里再排序(用程序实现)
zhengnan2012 2015-03-02
  • 打赏
  • 举报
回复
错了错了. 不同的表里面有相同的商户啊.得几个表里面汇总的数据才对啊. 上面的方法全部不适用- -!
gw6328 2015-03-02
  • 打赏
  • 举报
回复
下班了,暂时先不结,明天来收网. 明天来一起研究.
gw6328 2015-03-02
  • 打赏
  • 举报
回复
引用 3 楼 ky_min 的回复:
详细一看,还真是我理解错了,你查询的是统计的结果后的数量,这个,只有统计后再去分页了 如果要提高效率,常用的办法是,定时的将一些数据统计后转为化静态。
排时间分表,时间一过就是静态的了,现在主要是解决数据量,我不想把几张表的数据放一张表里面排序 看下我上面的方法. 现在是不是有个问题就是查询最后几页的时间怎么办?还是数据量超大啊.
gw6328 2015-03-02
  • 打赏
  • 举报
回复
我找到一个新的方法,大家一起研究一下. 比如我要查询数量从大到小前10条. 那么我先把各个表(条件内)的前10条都查出来,最后取大的10条 如果第二页 就用各表前20条,排序取第二页的数据,这样是不是对的? 我想了想前10条好像没有问题,那么前20条好像也没有问题.
引用 2 楼 ap0405140 的回复:
建议可以用空间换时间的方法, 单独建一个表用于保存数量汇总的统计结果,并用触发器实时同步数据更新.. 需要按数量排序查询时直接调用即可.
还在加载中灬 2015-03-02
  • 打赏
  • 举报
回复
详细一看,还真是我理解错了,你查询的是统计的结果后的数量,这个,只有统计后再去分页了 如果要提高效率,常用的办法是,定时的将一些数据统计后转为化静态。
唐诗三百首 2015-03-02
  • 打赏
  • 举报
回复
建议可以用空间换时间的方法, 单独建一个表用于保存数量汇总的统计结果,并用触发器实时同步数据更新.. 需要按数量排序查询时直接调用即可.
还在加载中灬 2015-03-02
  • 打赏
  • 举报
回复
没太明白,我觉得这个不是问题啊,所以应该是我理解有误 传统的分页可用临时表也可以不用临时表

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧