Oracle查询基于订单获取数据而不使用order by

时间:2016-02-13 17:48:31

标签: sql database oracle performance sql-order-by

以下是问题陈述:

我有一张表,我们在那里插入一些数据以及该医院的营业日期以及创建时间戳。

营业日期(Bday)定义医院完成业务的逻辑日,创建时间戳(create_ts)定义记录在数据库中插入的时间戳。 生产日期可能比创建时间戳提前1天,因为创建时间戳在PST中,而医院可以在澳大利亚南亚地区。 如果医院在申请中意外关闭今天的营业日期,医院也可以在第二天开业。

我需要将登台数据库中的记录同步到主数据库。

我想先将记录与最小创建时间戳同步。但是,order by是一项代价高昂的操作,因为有时要同步的记录数量超过100k

正在运行10个不同的线程来同步每个批量大小为50的记录。

第一个解决方案是尝试提取业务日期=最短营业日期的记录,但有一些复杂性:  1)由于某些问题,有些记录的最短业务日期没有同步,因此第二天记录从未在没有人工干预的情况下被提取。 2)有医院为未来的营业日期开放(例如今天是13日,他们意外关闭,因此他们在营业日期14日开业)。因此,这些记录没有得到处理,因为营业日期大于营业日期。

选择创建时间戳在最小创建时间戳和+1小时之间的记录。 但是在第(1)点中可能会再次出现问题,并且可能没有任何记录可以在最短创建时间戳和+1小时的卡住记录之间同步。

请为查询建议解决方案

表中的几列是:Hname(医院名称),Hloc(医院位置),Dseq(每日序列号),Bday(营业日期),create_ts和modify_ts

2 个答案:

答案 0 :(得分:0)

如果您不使用“ORDER BY”子句,Oracle不保证结果集的顺序。

但您可以考虑将CDC用于Oracle 11g或GoldenGate用于Oracle 12c - 它应该非常高效。新数据几乎会立即复制。 Oracle将负责处理它。

答案 1 :(得分:0)

一般来说:没有static Cache<HMODULE> s_moduleCache; - &gt;不保证结果集的顺序。