临时中间表

时间:2010-03-24 15:38:14

标签: sql oracle performance

在我们在oracle中生成大量报告的项目中,我们使用一些永久表来保存中间结果。例如,为了生成一个报告,我们运行几个查询并填充表,在最后一步,我们将中间表与巨大的应用程序表连接起来。 清除这些中间表以进行下一次报告运行。我们对绩效领域几乎没有关注。

  1. 这些中间表是事务性的,没有统计信息。将这些与分区并具有最新统计信息的应用程序表连接起来是个好主意。

  2. 我们需要存储在中间表中的这些结果可用于来自UI的请求,因此我们无法使用oracle提供的临时表。

  3. 对于可以做些什么的任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:4)

如果中间表达到一些相对一致的行数,您可以在填充过程完成后(一次)计算它们的统计信息,然后使用DBMS_STATS.LOCK_TABLE_STATS将这些值锁定到位。在截断表并且下一次重新加载开始后,对行等的高估并不重要,但是当进程开始查询表以进行下一个循环时,它们将会到位。

答案 1 :(得分:0)

您还可以查看动态采样(9i以后),请参阅以下链接

Ask Tom Magazine Article

See Section on -Query Plans with Temporary Tables