以下查询使用了大型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
条件是否必要且是否会对其产生任何性能影响?
答案 0 :(得分:1)
由于TB
上没有索引,SQL中的SELECT
子查询将在TB上进行全表扫描。如果TB表很大,则在TB.field1
上创建索引,TB.field2
,TB.field3
应该会显着提升性能。