索引与排序

来源:互联网 发布:淘宝原单尾货是正品吗 编辑:程序博客网 时间:2024/06/06 02:20
--以下语句没有索引又有order by ,必然产生排序

select * from t where object_id>2 order by object_id;


---新增索引后,Oracle就有可能利用索引本身就有序的特点,利用索引来避免排序,如下:
create index idx_t_object_id on t(object_id);

select * from t where object_id>2 order by object_id;  

上面语句有可能用索引,也有可能是全表扫描。因为如果走索引的话,必然要进行回表,引发大量逻辑读,但是避免了排序。如果是走全表扫描,可以一次读取多个数据块,速度也不一定差,所以优化器需要根据cost大小来动态选择了;


--如下情况Oracle肯定毫不犹豫的选择用索引,因为回表取消了 !      
select  object_id from t where object_id>2 order by object_id;


--另外,如果是如下语句,Oracle打死也不用索引了。  而是全表扫描
select  object_id from t where object_id>2;   

0 0
原创粉丝点击