我有一张包含数百万条记录的表,他们使用EFF_FROM和EFF_TO日期字段来记录这些记录。
99%的情况下,当应用程序查询此表时,它只关注EFF_TO为2099-12-31的记录,或者是活动而非历史记录。
我只将活动记录复制到表的测试版本,应用程序的SELECT查询从60秒复制到3秒。
我不一定要对每个EFF_TO日期进行分区。我不想将这种开销添加到填充表的进程中。我只想用2099-12-31查询记录的优化,我希望性能是即时的。
有直接的方法吗?或者我是否必须求助于创建活动表和历史表?
答案 0 :(得分:1)
分区就像单个数据集一样?
这是任何矛盾的事情,但是你要问的是分成两组数据,一组是EFF_TO,另一组是过去。
的EFF_TO为2099-12-31
设计错误 - 这些应该为空。
如果它们为null,则分区将很简单。按照目前的情况,您将不得不删除并重新创建分区 - 这是一项非常昂贵的操作(查看用于进行在线架构更新的工具)。
您可以通过创建多个分区来最小化影响,这些分区定义NOW周围的时段,然后在末尾添加一个额外的分区,并定期从开头删除一个。
应用程序的SELECT查询从60秒到3秒。
还有很多其他原因可以提高性能,而不仅仅是表格的大小