以下查询使用了较大的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条件是必要的吗?它对性能有什么影响吗?
发布于 2017-04-08 00:39:54
由于TB上没有索引,SELECT中的SQL子查询将对TB进行全表扫描。如果TB表很大,那么在TB.field1、TB.field2、TB.field3上创建索引可以显著提高性能。
https://stackoverflow.com/questions/43282868
复制相似问题