更好的“从表中删除行”性能

时间:2014-01-06 20:38:31

标签: oracle11g semantics triplestore

我在Oracle中有一个RDF图表,大约有。 7万,000三倍(行)

我有一个简单的select语句,它获取旧的重复项(三元组),并从此RDF图中删除它们。

现在, 假设我的SELECT返回300个结果, 这在计算上非常昂贵,因为DELETE对TEST_tpl表进行了300次全扫描,正如我所说TEST_tpl大约有。

7000,000行...

DELETE FROM TEST_tpl t WHERE t.triple.get_subject() 
IN 
(
    SELECT rdf$stc_sub from rdf_stage_table_TEST 
    WHERE  rdf$stc_pred LIKE '%DateTime%'
)

我正在尝试找到创建一个oracle过程的方法,该过程只能为多个值通过一次表...

或者也许有人知道更好的方式......

1 个答案:

答案 0 :(得分:1)

我解决这个问题的方法是我在triple.get_subject()

上创建了一个INDEX
CREATE INDEX "SEMANTIC"."TEST_tpl_SUB_IDX" 
ON 
"SEMANTIC"."TEST_tpl" ("MDSYS"."SDO_RDF_TRIPLE_S"."GET_SUBJECT"("TRIPLE"))

这极大地改善了性能。

感谢@Justin Cave和@ Michael的帮助。