有一个大型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