我有一个相对较大的表(~100m记录),它基本上是一个XML存储。可以有多个具有不同时间戳的XML文档(使用最新时间戳=最新版本的逻辑)。我们期待每月批量的更新数据,可能会使用约70%数据的新版本。我们正在计划只保留商店中最新的2-3个版本,所以我猜测我们当前的B树索引(记录ID,时间戳)不一定是最快的?一个直接的“选择*从表中的时间戳”= YYYY-MM-DD顺序记录ID,时间戳“查询需要15小时才能完成昨晚 - 相当高规格的工具包,我不认为其他人正在使用DB当时。Oracle复合键自动递增(减量!?)
(re:查询本身,理想情况下,我只想选择时间戳大于或等于yyyy-mm-dd的最新文档,但目前这不是问题)。
有什么办法,我可以创建一个自动递减列如下:
Record ID Timestamp Version XML
1 2011-10-18 1 <...>
1 2011-10-11 2 <...>
1 2011-10-04 3 <...>
2 2011-10-18 1 <...>
2 2011-10-11 2 <...>
等等等等 - 即作为一个新的版本出现时,最近的时间戳= 1版,和所有旧的记录得到版本=版本+ 1.这样我的管家脚本可以是一个简单的“删除版本> 3”(或者我们决定保留的任何东西),并且我可以在记录ID上有一个B树索引,并在版本上的二进制索引?
希望我没有完全找错了树 - 已经“创造性谷歌搜索”整个上午,这是理论,我拿出...
每个月的批次可以达到约7000万行。但每日批次约达250万行。如果甚至有可能获得每日批次,那可能值得考虑。 –
不可能 - 这是一个源头驱动的决定。但它有其好处 - 这意味着这些表格几乎每天都有空闲,数据被插入到这些表格中,每个月有一天,最新数据被提取并传递到前端系统。因此,插入/更新没有(实际)时间限制,但选择(和后续处理)有一个〜72小时的窗口,其中选择当前需要15个小时... – Andy