【发布时间】:2011-05-29 15:30:05
【问题描述】:
如果我理解documentation correctly;完整的提示应该强制进行全表扫描。在下面的场景中,它的表现不一样;
在其上创建的索引中的编号。
SQL> desc test;
Name Null? Type
----------------------------------------- -------- ----------------------------
NUM NOT NULL NUMBER
NUM2 NUMBER(10)
NUM3 NUMBER
查询:
select num from test;
结果:
NUM
----------
1
2
执行计划
Plan hash value: 410557223
-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 4 | 1 (0)| 00:00:01 |
| 1 | INDEX FULL SCAN | ID | 2 | 4 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------
查询:
select /* +full(test) */ num from test;
结果:
NUM
----------
1
2
执行计划
Plan hash value: 410557223
-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 4 | 1 (0)| 00:00:01 |
| 1 | INDEX FULL SCAN | ID | 2 | 4 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------
我知道我正在选择一个存储在索引中的值。添加任何其他列会使扫描完整。因此,我不得不问显而易见的问题。提示是请求还是对优化器的命令?
在旁注中,统计计算与优化有什么关系。索引的统计信息是自动更新还是显式操作?
【问题讨论】:
标签: sql oracle query-optimization