oracle 索引的原理???? 最好举个例哈,呵呵O(∩_∩)O~
发布网友
发布时间:2022-03-23 16:36
我来回答
共2个回答
热心网友
时间:2022-03-23 18:06
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
热心网友
时间:2022-03-23 19:24
Oracle 索引一般用B+树处理,对哪些字段建索引呢?
一般用在 Where "字段名"=字段值,如果该字段经常作为过滤条件放在Where命令后,
就需要对该字段建立索引。