0

我有两个看起来像这样的表:

table A: FieldID NUMBER (PK), other non-relevant fields
table B: FieldID NUMBER (PK/FK), other non-relevant fields

这些表映射了 1 : 0..1 的关系。具体来说,在表 A 中插入新行后,在未来的某个时间点,表 B 将填充额外的数据。

这种设计最初优于唯一的扩展表,以便在任何地方都有不可为空的字段(因为无法预测何时填充数据的“B”部分)。

现在...从 A 和 B 中选择连接的性能非常糟糕。我们正在讨论两个表中的几十万行,但是简单的内部连接需要大量时间才能完成。

除了将字段从 B 移到 A 中(为了避免额外的“空”检查,我不想这样做),我该如何提高我的表现?

4

2 回答 2

1

像这样加入:SELECT /*+GATHER_PLAN_STATISTICS*/ ... FROM .. WHERE ...;然后,向我们展示以下输出:SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST'));

这将显示执行计划和相关统计信息,在执行查询时估计和实际找到。

于 2013-02-12T10:24:49.410 回答
1

如果您对所有行的两个表进行等值连接,那么您应该从哈希连接中获得最佳性能。如果可以缓存较小的连接数据集,则成本仅略高于对两个表的完整扫描,这与您可以获得的效率差不多。

如果您只连接少量的行,那么哈希集群可能会有所帮助,因为它在物理上将两个表的行放在一起,并且对于少量的行来说连接非常有效。不利的一面是,对任何一个(尤其是较小的表)的完整扫描将更加昂贵,插入也是如此。

于 2013-02-12T10:35:14.817 回答