Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle11g “更好”;从表中删除行";演出_Oracle11g_Semantics_Triplestore - Fatal编程技术网

Oracle11g “更好”;从表中删除行";演出

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_

我在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_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"))