我在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过程的方法,该过程只能为多个值通过一次表...
或者也许有人知道更好的方式......
答案 0 :(得分:1)
我解决这个问题的方法是我在triple.get_subject()
上创建了一个INDEXCREATE INDEX "SEMANTIC"."TEST_tpl_SUB_IDX"
ON
"SEMANTIC"."TEST_tpl" ("MDSYS"."SDO_RDF_TRIPLE_S"."GET_SUBJECT"("TRIPLE"))
这极大地改善了性能。
感谢@Justin Cave和@ Michael的帮助。