【发布时间】:2015-05-01 08:08:24
【问题描述】:
想要优化一个查询,减去它需要太多时间......如果他们可以提供感谢帮助。
我有两张桌子 A 和 B,
表 A:ID、值
表 B:ID
我想要所有不在表 B 中的表 A 记录。显示值。 因为它是这样的:
Select ID, value
FROM A
WHERE value> 70
MINUS
Select ID
FROM B;
只有这个查询花费的时间太长......任何提示如何最好这个简单的查询?
感谢关注
【问题讨论】:
-
回复您删除的答案:
CREATE INDEX tablea_id ON a (id);CREATE INDEX tablea_value ON a (value(10));CREATE INDEX tableb_value ON b (id);docs.oracle.com/cd/E17952_01/refman-5.0-en/create-index.html可见 -
问题是据说不能在表上创建索引....逃脱我的控制...
-
您好,请查看我的更新答案。您可以使用索引显着提高查询的性能。您的查询或 MINUS 或 NOT EXISTS 都没有问题,没有任何魔法发生。需要这么长时间的原因是因为您在没有索引的情况下完成了这一切。我希望这有帮助。如果您无法创建索引,那么您将陷入性能不佳的困境。谁负责数据库。告诉他们,他们需要把头从背后拉出来并索引桌子!
-
我刚刚想到的另一个想法是您可以生成物化视图。如果我记得的话,物化视图会按照您指定的时间间隔(每天一次或每小时一次)将数据加载到内存中。因此,当您查询该视图时,它应该是即时的。如果您愿意,您可以尝试创建每个表的物化视图,这可能有助于提高性能。我与 Oracle 合作已经有 6 个月了,所以我不太确定具体情况。
标签: oracle optimization