在查询1上,正在执行全表扫描,即使id是索引列.查询2实现了相同的结果,但更快.如果查询1运行返回索引列,那么它将快速返回,但如果返回非索引列,或者整个行是查询需要更长时间.
在查询3中,它运行速度很快,但是“代码”列是VARCHAR2(10)而不是NUMBER(12),并且与“id”相同.
为什么Query 1不能拿起它应该使用索引?有什么应该改变,以允许索引号码列执行更快?
[查询1]
select a1.*
from people a1
where a1.id like '119%'
and rownum < 5
解释计划
SELECT STATEMENT ALL_ROWS
成本:67字节:2,592基数:4
2 COUNT STOPKEY
1表访问全表人
费用:67字节数:3,240基数:5
[查询2]
select a1.*
from people a1, people a2
where a1.id = a2.id
and a2.id like '119%'
and rownum < 5
解释计划
SELECT STATEMENT ALL_ROWS
费用:11字节:2,620基数:4
5 COUNT STOPKEY
4表格索引索引ROWID TABLE people
费用:3字节数:648基数:1
3个NESTED LOOPS
费用:11字节:2,620基数:4
1索引快速全扫描索引people_IDX3
费用:2字节:54,796基数:7,828
2 INDEX RANGE SCAN INDEX people_IDX3
费用:2基数:1
[查询3]
select a1.*
from people a1
where a1.code like '119%'
and rownum < 5
解释计划
SELECT STATEMENT ALL_ROWS
费用:6字节:1,296基数:2
3 COUNT STOPKEY
2表格访问索引ROWID TABLE人
费用:6字节:1,296基数:2
1 INDEX RANGE SCAN INDEX people_IDX4
成本:3基数:2