如题,现在还被索引的概念搞混了,理解不了。我就举个例子,假设有表student,有1W条数据。
如果没有建立列id索引,查询如下:
select name ,age from student where id<5000;
系统执行这个语句的时候,是不是就会先搜索完整个表里的数据,然后返回满足条件的记录?如果加了索引:
create index my_index on student(id);
然后再查询上面语句:
select name ,age from student where id<5000;
系统是不是执行这句的时候,会先直接通过索引定位到id为5000的记录上,然后做后续的工作?前面这个问题估计有些弱智,但是确实糊涂了?还有看资料的时候,好多情况下索引是不能够起作用,这又是为什么,内在的原理是什么?
麻烦懂得大神解释下啊
在线等.........Oracle索引sql优化
如果没有建立列id索引,查询如下:
select name ,age from student where id<5000;
系统执行这个语句的时候,是不是就会先搜索完整个表里的数据,然后返回满足条件的记录?如果加了索引:
create index my_index on student(id);
然后再查询上面语句:
select name ,age from student where id<5000;
系统是不是执行这句的时候,会先直接通过索引定位到id为5000的记录上,然后做后续的工作?前面这个问题估计有些弱智,但是确实糊涂了?还有看资料的时候,好多情况下索引是不能够起作用,这又是为什么,内在的原理是什么?
麻烦懂得大神解释下啊
在线等.........Oracle索引sql优化
2)至于不走索引、有兴趣可以参考我的文章:深入理解Oracle索引(23):6 种常见不走索引的原因分析:http://blog.csdn.net/linwaterbin/article/details/9077483
当你的查询条件中有id字段,oracle会对索引段中的id列进行快速搜索(因为已经排序,所以会使用各种快速搜索算法,如二分法),找到满足条件的id,最后通过在索引段中找到符合id对应的rowid,然后根据rowid在student表中读取相应的记录。