这是有关Oracle RDBMS 12c上具有特定方案的Oracle MERGE INTO
语句的一般问题。
每日数据将加载到StagingTableA
-大约10m行。
这将是MERGEd INTO TableA
。
TableA
将在0到10m行之间变化(匹配StagingTableA
)。
有时TableA
会被修剪/清空,并留下0行。
很明显,当TableA
为空时,将直接使用INSERT
,但是该过程被编写为使用MERGE INTO
方法来处理所有情况。
MERGE .. MATCH
在索引列上。
我的问题是,在MERGE
开始为空然后在MATCH
执行期间急剧增长的情况下,TableA
如何处理MERGE
的不确定性。索引列上的MATCH
将使用FTS,因为统计信息将显示该表有0行。
在MERGE
交易过程中,这会变得效率低下。
MERGE
语句是否足够聪明以检测到这一点并更改执行计划,并开始使用索引而不是FTS?
如果使用CURSOR
,UPDATE
和INSERT
来完成此操作,那么我们可能会在适当的时候(例如处理50,000次后)引入ANALYZE
TableA
切换到最佳计划。
我找不到任何有关此特定问题的文档。
答案 0 :(得分:0)
希望您在该表上具有一个UNIQUE索引,该索引基于传入的数据。如果我是你,而不是使用简单的MERGE:
DUPLICATE VALUE ON INDEX
异常,并发出适当的UPDATE。DBMS_STATS.GATHER_TABLE_STATS
。好运。