Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 全表扫描或索引扫描_Sql_Oracle_Performance_Indexing_Query Optimization - Fatal编程技术网

Sql 全表扫描或索引扫描

Sql 全表扫描或索引扫描,sql,oracle,performance,indexing,query-optimization,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

以下查询使用了一个大型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
条件是否必要以及由此产生的任何性能影响?

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

在确定查询的执行计划时会遇到太多因素。我们不知道索引、记录数、群集等。请与您的DBA联系或自己评估执行计划。正确,由于TB上没有索引,因此需要进行完整的表扫描。@Arun谢谢,在全局临时表上放置索引有任何潜在问题吗?我想应该可以,但我不是专家,所以我可能错了。这里有一个讨论这个问题的链接。也许“释放”能给你一些帮助inputs@Dreamer据我所知,与GTT上的索引无关。