我有一个拥有数百万条记录的表,它们利用EFF_FROM和EFF_TO日期字段对记录进行版本化。
99%的情况下,当应用程序查询此表时,它只涉及EFF_TO为2099-12-31的记录,或者是活动的而非历史的记录。
我只将活动记录复制到表的测试版本中,应用程序的SELECT查询从60秒到3秒。
我不一定要对每个EFF_TO日期进行分区。我不想增加这种开销,特别是在填充表的进程中。我只想优化查询记录与2099-12-31,我希望性能是即时的。
有什么简单的方法吗?还是我必须创建一个活动表和一个历史表?
发布于 2015-01-29 21:27:50
为一组数据划分类似于函数?
这是任何矛盾的东西,但是您要问的是划分成两组数据,一组是未来的EFF_TO,另一组是过去的数据。
EFF_TO为2099-12-31
设计错误-这些应该是空的。
如果它们为空,则分区将是简单的。就目前情况而言,您将不得不删除并重新创建分区--这是一个相当昂贵的操作(请查看用于在线模式更新的工具)。
您可以通过创建多个分区,定义当前的周期,然后在结束时添加一个额外的分区,并定期从一开始删除一个分区,从而将影响降到最低。
应用程序的SELECT查询从60秒变为3秒。
除了表的大小之外,还有很多其他原因可以解释性能的提高。
https://stackoverflow.com/questions/28224710
复制相似问题