Oracle索引分析与比较(3)

5CBO模式下表很久没分析,表的增长明显,优化器采取了全表扫描。

SQL> select * from test.testindex where a like '1%';

A             B

---- ----------

1             2

1             1

10           10

11           11

12           12

13           13

14           14

15           15

16           16

17           17

18           18

19           19

100         100

已选择13行。

Execution Plan

----------------------------------------------------------

   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=13 Bytes=52)

   1   0  TABLE ACCESS (FULL) OF 'TESTINDEX' (Cost=1 Card=13 Bytes=52)

(表一共102行,选择比例为13/102>10%,优化器选择了全表扫描)

――――――――――――――――――――――――――――――――――

增加表行数

SQL> declare i number;

  2  begin

  3  for i in 200 .. 1000 loop

  4  insert into test.testindex values (to_char(i),i);

  5  end loop;

  6  end;

  7  /

PL/SQL 过程已成功完成。

SQL> commit;

提交完成。

SQL> select count(*) from test.testindex;

  COUNT(*)

----------

903

SQL> select * from test.testindex where a like '1%';

A             B

----  ----------

1             2

1             1

10           10

11           11

12           12

13           13

14           14

15           15

16           16

17           17

18           18

19           19

100          100

1000         1000

已选择14行。

Execution Plan

----------------------------------------------------------

   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=13 Bytes=52)

   1  0  TABLE ACCESS (FULL) OF 'TESTINDEX' (Cost=1 Card=13 Bytes=52)

  (表一共903行,选择比例为14/903<5%,优化器选择了全表扫描,选择路径是错误的)

―――――――――――――――――――――――――――――

给表做分析

SQL> analyze table test.testindex compute statistics for table for all indexed c

olumns for all indexes;

表已分析。

SQL> select * from test.testindex where a like '1%';

A             B

---- ----------

1             2

1             1

10           10

100         100

1000       1000

11           11

12           12

13           13

14           14

15           15

16           16

17           17

18           18

19           19

已选择14行。

Execution Plan

----------------------------------------------------------

   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=24 Bytes=120)

   1   0  TABLE ACCESS (BY INDEX ROWID) OF 'TESTINDEX' (Cost=4 Card=

          24 Bytes=120)

   2  1  INDEX (RANGE SCAN) OF 'IND_COLA' (NON-UNIQUE) (Cost=2 Ca

          rd=24)

(经过分析后优化器选择了正确的路径,使用了ind_cola索引)

――――――――――――――――――――――――――――――――――

小结

这篇文章介绍了oracle数据库中的各种索引,通过分析它们的结构,我们知道了它们的特点和应用范围,同时介绍了如何去避免索引失效,希望对大家有所帮助。

 

 

 

Johnny 转载自:

 

http://spaces.msn.com/roujiaweize/blog/cns!9745F14B4AEB3B72!411.entry?_c=BlogPart

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值