2014-01-06 40 views
1

我在Oracle中有一個RDF圖, 7,000,000三元組(行)更好「從表中刪除行」性能

我有一個簡單的選擇語句,得到的舊副本(三元組),它從這個RDF圖中刪除它們。現在

, 比方說,我選擇返回300個結果, 這得到計算非常昂貴的,因爲DELETE做的TEST_tpl表300倍的全掃描和我說TEST_tpl具有約

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過程的方式......

或者也許有人知道一個更好的辦法...

+0

'test_tpl'的定義是什麼? 「triple」是一種對象類型嗎?你可以發佈查詢計劃嗎?你確定'test_tpl'表被全部掃描了300次嗎?這是可能的,但這似乎是優化器選擇一個非常奇怪的計劃,除非你有一些棘手的統計數據。 –

+0

爲什麼你不使用三重商店? – Michael

回答

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的幫助。