Oracle Sql 调整索引
Oracle Sql tuning with index
我有一个 table T,有大约 500000 条记录。即 table 是分层的 table。
我的目标是根据父子关系的某些条件,通过自我加入相同的 table 来更新 table
更新查询花费的时间非常长,因为行数非常多。我在列上创建了一个唯一索引,它有助于识别要更新的行(意味着 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 进行完整的 table 扫描,并且在更新期间也会作为结果查询将永远完成。
请提出解决此问题的任何提示或建议
您要更新所有 500,000 行,因此索引不是个好主意。 500,000 次索引查找将花费比需要更长的时间。
使用 MERGE
语句会更好。
很难确切地说出你的 table 结构是什么,但它看起来像这样,假设 X 和 Y 是 T 中的主键列(......可能是错误的) :
MERGE INTO T
USING ( SELECT TC.X,
TC.Y,
TP.A1,
TP.A2
FROM T TC
INNER JOIN T TP ON TP.ID = TC.PARENT_ID ) U
ON ( T.X = U.X AND T.Y = U.Y )
WHEN MATCHED THEN UPDATE SET T.A1 = U.A1,
T.A2 = U.A2;
我有一个 table T,有大约 500000 条记录。即 table 是分层的 table。 我的目标是根据父子关系的某些条件,通过自我加入相同的 table 来更新 table 更新查询花费的时间非常长,因为行数非常多。我在列上创建了一个唯一索引,它有助于识别要更新的行(意味着 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 进行完整的 table 扫描,并且在更新期间也会作为结果查询将永远完成。
请提出解决此问题的任何提示或建议
您要更新所有 500,000 行,因此索引不是个好主意。 500,000 次索引查找将花费比需要更长的时间。
使用 MERGE
语句会更好。
很难确切地说出你的 table 结构是什么,但它看起来像这样,假设 X 和 Y 是 T 中的主键列(......可能是错误的) :
MERGE INTO T
USING ( SELECT TC.X,
TC.Y,
TP.A1,
TP.A2
FROM T TC
INNER JOIN T TP ON TP.ID = TC.PARENT_ID ) U
ON ( T.X = U.X AND T.Y = U.Y )
WHEN MATCHED THEN UPDATE SET T.A1 = U.A1,
T.A2 = U.A2;