全表扫描或索引扫描

时间:2017-04-07 16:19:17

标签: sql oracle performance indexing query-optimization

以下查询使用了大型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.field0A.field1上有索引,但TB上没有索引,是否会进行全表扫描或索引扫描?此外,WHERE条件是否必要且是否会对其产生任何性能影响?

1 个答案:

答案 0 :(得分:1)

由于TB上没有索引,SQL中的SELECT子查询将在TB上进行全表扫描。如果TB表很大,则在TB.field1上创建索引,TB.field2TB.field3应该会显着提升性能。