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的时候,内部是怎样处理的?
事实上我也不知道怎么表达,我只知道这的个可以用目录来比喻,可是具体是怎样运行的,我还是不明白,对某一个列建立索引,那么我查询的时候是怎样提高速度的?是怎样缩小范围的? 展开
对b建立索引:create index aindex on student(b);
那么当我用select * from student的时候,内部是怎样处理的?
事实上我也不知道怎么表达,我只知道这的个可以用目录来比喻,可是具体是怎样运行的,我还是不明白,对某一个列建立索引,那么我查询的时候是怎样提高速度的?是怎样缩小范围的? 展开
2个回答
展开全部
select * from student的时候,内部会进行一次对 表student全表扫描。
比如b列代表的是 学生姓名
select * from student where a='张三' 此时oracle内部会对 属于student表名为aindex的索引进行扫描。
如果该表有上百万的数据,则该查询效果会十分明显。
在执行完 create index aindex on student(b);
oracle 自动创建一张索引表 里面的字段有 索引列b和rownum;就好比是书的目录,有章节和页码一样。这也就是为什么索引可以提高查询速度的原因了。
说白了 索引只是用于优化where后面的条件查询,但注意的是 不是索引越多越好,where后面使用到的索引列套用了函数的话 是不会只用到索引的,创建索引的列也不是那么随便的。
希望对你有帮助~
比如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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询