主要是一个电信业务的系统,有一个业务报表的数据库,里面存放聚合信息,用来计算KPI指标。从各个维度计算成功率,失败率,下载速率之类的指标。前端报表调用写好的存储过程,将结果返回生成业务报表现在有几个问题:数据库里面的表,没有主键,没有索引。各个表都类似(date,Tel-phoneNumber,Dlinksize,uplinkesize,successRate,FaileRate,duration)的结构。这样带来的结果是无法用复制分发功能做读写分离,所有的查询都是表扫描,当数据达到1000w(一般1-2周左右时间)的时候效率无法让人接受。前端报表里面一个页面可能会调用一个存储过程多次,因为展示的报表模式不一样(比如用一个统计要同时展示柱图和饼图,用得是用一个存储过程返回的结果,但是要执行2次)现在我暂时的解决办法是根据调用的存储过程脚本先给表加上非聚集索引。因为这些表在现场会每小时插入大量数据,所以加identity-ID做主键的方法会造成频繁锁表请问下各位有设计经验的大拿们:1)这种插入查询都很多的报告表如何更改下设计 2)有无好的办法是解决前端调用多次调用同一个存储问题

解决方案 »

  1.   

    调用存储过程的结果不是一个记录集么,如果是相同的,为什么要调用两次呢?直接使用上次调用结果不行吗?
      

  2.   

    是一个结果集,前台直接将结果集转化为图表。但是在同一个页面上要展示多个模式的图表,比如左边是结果集的柱图右边是结果集的饼图。这样前台就要调用2次,数据库上也就要先后执行2次。不知道有无好点的建议?
      

  3.   

    你在调用时,结果集设置为动态游标,这样可以返回到结果集的第一行的.
      

  4.   

    前台的模式是一个存储过程对应一个报表,多个报表就需要多个存储过程,暂时无法识别是否是同一个存储过程。
    不知道在数据库的方面有无调优的建议?