1

我在 Oracle 中有一个 RDF 图,它大约有。7 ,000, 000 个三元组(行)

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

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

7,000, 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 过程的方法,该过程对于多个值只通过一次表...

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

4

1 回答 1

1

我解决这个问题的方法是我在triple.get_subject() 上创建了一个索引

CREATE INDEX "SEMANTIC"."TEST_tpl_SUB_IDX" 
ON 
"SEMANTIC"."TEST_tpl" ("MDSYS"."SDO_RDF_TRIPLE_S"."GET_SUBJECT"("TRIPLE"))

这极大地提高了性能。

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

于 2014-01-07T18:44:47.937 回答