有一個大型Oracle表A
和下面的查詢使用比較大的全局臨時表TB
:全表掃描或索引掃描
UPDATE A
SET A.field0 = (SELECT SUM(TB.field0)
FROM TB
WHERE TB.field1 = A.field1 AND
TB.field2 = A.field2 AND
TB.field3 = 'value')
WHERE EXIST (SELECT 1
FROM TB
WHERE TB.field1 = A.field1 AND
TB.field2 = A.field2 AND
TB.field3 = 'value');
基本上EXIST
條件只是用來檢查記錄曾經存在過。現在對於這個查詢,如果A.field0
和A.field1
上有索引,但是根本沒有TB
上的索引,它會執行全表掃描還是索引掃描?此外,是否需要WHERE
條件以及它的任何性能影響?
確定查詢的執行計劃時會遇到太多因素。我們不知道索引,記錄數量,集羣等。與您的DBA交談或親自評估執行計劃。 – Cameron