【发布时间】:2017-02-10 17:39:37
【问题描述】:
我有一个表 T 有大约 500000 条记录。该表是一个分层表。 我的目标是根据父子关系的某些条件通过自我加入同一个表来更新表 更新查询需要很长时间,因为行数非常高。我在列上创建了一个唯一索引,有助于识别要更新的行(平均 x 和 Y)。创建索引后,成本降低了,但查询的执行速度仍然慢了很多。
这是我的查询格式
update T
set a1, b1
= (select T.parent.a1, T.parent.b1
from T T.paremt, T T.child
where T.parent.id = T.child.Parent_id
and T.X = T.child.X
and T.Y = T.child.Y
在创建索引后,执行计划显示它正在对 CRS.PARENT 进行索引扫描,但正在对 CRS.CHILD 进行全表扫描,并且在更新期间,查询将永远完成。
请提出解决此问题的任何提示或建议
【问题讨论】:
-
请运行
EXPLAIN PLAN FOR update T ....(resto uf your query)....,然后运行SELECT * FROM table( DBMS_XPLAN.Display ),然后复制最后一个查询的结果(作为文本!!!- 不是位图!!!)并将其附加到问题中。有关解释计划命令的更多信息,您可以在此处找到:docs.oracle.com/cd/B28359_01/server.111/b28274/…
标签: sql oracle performance query-performance