上千万数据的查询、统计的性能问题,提供方案。请斑竹、大虾赐教(特别是大力,你结婚我可是大大的祝福你了)

bonnyone 2005-07-25 03:54:10
我们现在开发的是医院检验信息的管理软件,在大医院中经常涉及到大量数据信息的处理(一个月有50~60万条是正常的),因此在查询、统计的时候,由于没有怎么做优化,所以效率一直很低下。想过很多解决方案,可是还是不尽如意:
第一种方案:对数据按月分表(每个月建立一个表,表名称有规律,可按照月份取得)
方法:
1)建立静态视图,把所有分区表关联起来,不过,这样和不需要分区表(就是把所有记录放在同一表)的效果一样,甚至还不如后者,因为后者不需要花费建立视图,在视图中建立索引的开销。
2)如果建立动态分区视图,根据查找时间段把包含该查询时间段的月份放到这个动态视图中,这样,数据量就小多了。只是这样,建立该视图和在该视图上建立索引也会花费时间,这样是否会有点得不偿失?而且,通过在大表(不做分表处理)建立索引(如果高效建立索引,还希望能赐教),个人认为可以达到差不多的效率。
第二种方案:对数据表按月实现分区视图(数据保存在一个表中,只是对该表的数据按月放在不同视图中……怎么我感觉和第一种情况差不多啦。
第三种方案:针对统计的效率问题,我们也尝试着用建立一个专门包含了统计信息表来保存冗余信息,在统计的时候只是对这个表进行操作,虽然速度有了提高,但是因为统计很多,不便为每个统计专门建立一个表,而且这样空间消耗太大,难以取舍。
另外就是建立索引问题,因为业务关系,我们有些表由很多字段组成一个主键,特别是主要的一些表,一般有4个以上,最多的有7个(可能表结构需要修改了)。查询的条件有很多选择,不过时间是必须的(也是主键),我在建组合索引的时候,该时间字段我放在第一次。对了,问一下,建立索引的顺序和where中查询字段的顺序是否需要一致?不一致会不会使索引失效? 看了很多有关建立索引的方案,可是总感觉不是很合适,好像需要对大部分字段建立索引,而且,索引本身也影响性能。呵呵,不知道有没有葵花宝殿什么的,可以速成神功的阿!!
其他的象分布式,如果由好几个分布在不同数据库的同名表连接成一个视图,该试图中没有那些表的索引,如果需要在该试图相应的索引,这样的代价怎么样?!
请高手高手高高手赐教阿!!
...全文
324 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
子陌红尘 2005-07-27
  • 打赏
  • 举报
回复
如正常情况下条件是1、2、3、4, 可是由于2没有被选中成查找或统计的条件,这样where中只有1、3、4,而我按照1、2、3、4建的索引就无效了
---------------------------------------------------------------------------
只要用到了1,就可以利用到索引,因为查找是从索引第一个字符开始匹配的
ghostzxp 2005-07-27
  • 打赏
  • 举报
回复
关注一下大数据量的处理
bonnyone 2005-07-27
  • 打赏
  • 举报
回复
TO: libin_ftsafe(子陌红尘)
看了以上的提示,再加上查资料,了解了大概。不过,因为在查找或统计的时候条件可以删选,所以where条件很难确定,如正常情况下条件是1、2、3、4, 可是由于2没有被选中成查找或统计的条件,这样where中只有1、3、4,而我按照1、2、3、4建的索引就无效了,这样还是要建很多索引来适应需要马?!, 另外,说将分区之后的表分别放置在不同的物理磁盘上,这样是通过文件组方式来实现,还是建立几个数据库。如果是文件组,那具体是怎么操作的,有没有相关的文档阿?!
bonnyone 2005-07-27
  • 打赏
  • 举报
回复
呵呵,查了sql server的自带帮助, 找到了 分区视图 的具体操作方法! 呵呵
bonnyone 2005-07-26
  • 打赏
  • 举报
回复
郁闷,, 等了一天了!!
laker_tmj 2005-07-26
  • 打赏
  • 举报
回复
up learn
bonnyone 2005-07-25
  • 打赏
  • 举报
回复
自己给自己加油了
summerICEREDTEA 2005-07-25
  • 打赏
  • 举报
回复
只能MARK了 -.-
bonnyone 2005-07-25
  • 打赏
  • 举报
回复
经济成本不在考虑之列, 只是想知道采取不同方法的速度有何不同,选取最优方案为最终方案!!
呵呵
子陌红尘 2005-07-25
  • 打赏
  • 举报
回复
1、建议采用分区视图,对数据按照时间为维度进行分区。分区视图会在一定程度上提高检索的效率,因为查询分析器可以制订并行查询的计划。而将分区之后的表分别放置在不同的物理磁盘上时,可以并行I/O,效率会更高一些。
2、并非每个被列入查询条件的字段都需要建立索引,组合索引的建立顺序应该与where条件之后的查询顺序一致,否则将无法正确使用索引查找。
3、如果有条件,可以采用多台数据库服务器,采用分布式分区视图,当然,在多台服务器上并行查询的经济成本太高。
bonnyone 2005-07-25
  • 打赏
  • 举报
回复
怪事,就算斑竹不在,其他高手也不再马?!

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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