oracle 索引的原理???? 最好举个例哈,呵呵O(∩_∩)O~

比如我有一张表,student,有a,b,c,d,e,f这么几列对b建立索引:createindexaindexonstudent(b);那么当我用select*from... 比如我有一张表,student,有a,b,c,d,e,f这么几列
对b建立索引:create index aindex on student(b);
那么当我用select * from student的时候,内部是怎样处理的?

事实上我也不知道怎么表达,我只知道这的个可以用目录来比喻,可是具体是怎样运行的,我还是不明白,对某一个列建立索引,那么我查询的时候是怎样提高速度的?是怎样缩小范围的?
展开
 我来答
在雍和宫哈哈大笑的白茶
2011-09-19 · TA获得超过842个赞
知道小有建树答主
回答量:254
采纳率:100%
帮助的人:187万
展开全部
select * from student的时候,内部会进行一次对 表student全表扫描。
比如b列代表的是 学生姓名
select * from student where a='张三' 此时oracle内部会对 属于student表名为aindex的索引进行扫描。
如果该表有上百万的数据,则该查询效果会十分明显。
在执行完 create index aindex on student(b);
oracle 自动创建一张索引表 里面的字段有 索引列b和rownum;就好比是书的目录,有章节和页码一样。这也就是为什么索引可以提高查询速度的原因了。

说白了 索引只是用于优化where后面的条件查询,但注意的是 不是索引越多越好,where后面使用到的索引列套用了函数的话 是不会只用到索引的,创建索引的列也不是那么随便的。

希望对你有帮助~
追问
在执行完 create index aindex on student(b);
oracle 自动创建一张索引表 里面的字段有 索引列b和rownum;就好比是书的目录,有章节和页码一样。这也就是为什么索引可以提高查询速度的原因了。

这里的意思是:创建的索引表会根据索引列的值进行排序【相同值的排在一起,那个rownum是自增列,还是与原表的列数对应??】,这样的话,以后查询时就会很方便。。。。是这个意思吗?
追答
呃 不好意思 是rowid  不是rownum;    (不过你说对了 rownum是自增列,是一个伪列)
ROWID是表中行的唯一标识,是一个伪列。
而你说的 “索引表会根据索引列的值进行排序” 这个不一定。如果你批量插入数据,B列有10,20,30,40,50,60,70 可能现在的索引表中的索引列是按照顺序的,但之后你又插入了个12,那么这行数据插入到表中后,也会插入到索引列的“最后”,这里的最后为什么用引号引起来,因为这个问题就会涉及到数据块存储方面的了。

其实最简单 最形象的 就是书的目录页码就是rowid 可能你的目录是
索引列.................. rowid
第一章..................12
第二章..................8
第三章..................5
第四章..................3
百度网友1df238c
2011-09-18
知道答主
回答量:19
采纳率:0%
帮助的人:11.8万
展开全部
Oracle 索引一般用B+树处理,对哪些字段建索引呢?

一般用在 Where "字段名"=字段值,如果该字段经常作为过滤条件放在Where命令后,
就需要对该字段建立索引。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式