利用PL/SQLDeveloper的执行计划查看:

select* from test_objects where object_name = 'PEOPLE‘

  创建索引:

createindex idx_test_object on test_objects(object_name);

  再次查看执行计划。

  这里需要注意的是,搜索条件中包含索引列才能真正使用到索引所带来的好处。

select* from test_objects where owner = 'SCOTT'

  1、添加数据对索引的影响

  以表people为例,一旦在其上创建了索引,向其中插入数据时,数据库将会重新组织索引。

  insert into people (ID, NAME, STATUS) values (11, 'Zoey', 'ACT');

  在以上SQL语句中,向表people中插入名为“Zoey”的用户信息。此时数据库除了正常的插入操作开销之外,还需要将为该记录添加索引项,而索引已有数据块无法满足存储要求,因此,数据库将为其分配新的存储空间,如图所示:

  2、修改数据对索引的影响

  从图中可以看出,“James”被添加了删除标记,而在后一个数据块中添加了索引项“Winne”。Oracle采取该策略是为了大程度上减小数据库操作的开销。但这同时带来了空间上的浪费,因为索引项“James”仍然占用索引空间。新的索引项仍然不能够插入第一个数据块中。

  3、删除数据对索引的影响

  删除数据对索引的影响相对简单,因为数据删除之后,相应的索引项只是被打上了删除标记,表征该索引项不可用。例如,利用如下SQL语句删除一条记录。

  delete from people where name = 'Robert'

  此时的索引项被修改为:

  分析此时的索引结构可知,删除操作是DML操作中针对索引的开销小的一种。但是,仍然不可避免地形成了对存储空间的浪费。

  说明:从上面对Oracle的增删改操作对索引的影响可以类比一下ArcSDE增删改对索引的影响是一样的。所以说,频繁的进行编辑操作,不仅仅是对表进行操作,相关的索引信息也会发生很多变化。

  那么由上面所示,可以看出,其实索引大的功劳还是针对只读数据(不是的),那么可以得到以下的总结:

  1、小数据量的表不宜使用索引

  小数据量的表,首先要创建索引,并寻找数据块,然后才进行数据的实际搜索,因此,对于小数据量的表,使用全表搜索往往会快于使用索引。