Oracle11g “更好”;从表中删除行";演出
我在Oracle中有一个RDF图,它有大约7000000个三元组(行) 我有一个简单的select语句,它获取旧的重复项(三元组),并从这个RDF图中删除它们 现在,, 假设我的SELECT返回300个结果, 这在计算上非常昂贵,因为DELETE对TEST_tpl表进行了300次完整扫描,正如我所说,TEST_tpl大约有 7000000行Oracle11g “更好”;从表中删除行";演出,oracle11g,semantics,triplestore,Oracle11g,Semantics,Triplestore,我在Oracle中有一个RDF图,它有大约7000000个三元组(行) 我有一个简单的select语句,它获取旧的重复项(三元组),并从这个RDF图中删除它们 现在,, 假设我的SELECT返回300个结果, 这在计算上非常昂贵,因为DELETE对TEST_tpl表进行了300次完整扫描,正如我所说,TEST_tpl大约有 7000000行 DELETE FROM TEST_tpl t WHERE t.triple.get_subject() IN ( SELECT rdf$stc_
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过程,对于多个值,该过程只需遍历表一次
或者也许有人知道更好的方法…我解决这个问题的方法是在triple.get\u subject()上创建一个索引 这大大提高了性能
感谢@Justin Cave和@Michael的帮助。测试的定义是什么?
triple
是对象类型吗?你能发布查询计划吗?您确定test\u tpl
表被完整扫描了300次吗?这是可能的,但这似乎是一个非常奇怪的计划,优化器选择,除非你有一些疯狂的统计数据。你为什么不使用三重存储呢?
CREATE INDEX "SEMANTIC"."TEST_tpl_SUB_IDX"
ON
"SEMANTIC"."TEST_tpl" ("MDSYS"."SDO_RDF_TRIPLE_S"."GET_SUBJECT"("TRIPLE"))