【发布时间】:2009-07-07 23:38:20
【问题描述】:
我有一个数据库基础架构,我们定期(至少每天一次)将表的全部内容从源数据库复制到大约 20 个目标数据库。由于使用了复制代码(我们必须使用常规的 oracle 查询,无法控制或直接访问源数据库)——这导致源表有 20 种全表排序。
有没有办法在查询中对此进行优化?我正在寻找基本上可以告诉oracle“我将重复对整个表进行排序”的东西? MySQL 有一个带有 myisamchk 的选项,您可以告诉它对表进行排序并保持排序顺序,但显然由于多种原因这不适用于此处。
目前,还涉及一些中间表(从 A 同步到 B,然后从 B 同步到 C。)我们确实可以控制中间表,所以如果那里有调整选项,那也会很有用。
一般来说,查询几乎都是非常简单的形式:
select a, b, c, d, e, ... z from tbl1 order by a, b, c, d, e, ... z;
我知道流,但如上所述,主要源表不在我们的控制范围内,因此我们将无法在那里使用流。 (此外,这些源表每天都会从快照中完全重建,因此流无论如何都不会真正起作用。)
【问题讨论】:
-
为了进一步澄清 - 复制代码在源数据库和目标数据库之间进行并行行级比较,并执行一整套单独的行更新 (I/U/D) 以目标表使其与源同步。同样的全表选择和排序也会针对目标表运行。
-
如果目标是将数据从一个表/数据库复制到另一个,我不明白你为什么要排序,你能解释一下吗?
标签: database performance oracle replication