您的位置:首页 > 职场人生

面试知识点---数据库的索引

2008-10-15 20:22 387 查看
索引相关:

1.索引的分类:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。

我们把这种内容本身就是一种按照一定规则排列的目录称为“聚集索引”。

我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。

由于聚集索引跟内容的存储顺序相关,因此一个表只能存在一个聚集索引。使用聚集索引的最大好处就是能够根据查询要求,迅速缩小查询范围,避免全表扫描。

2.索引的实现: Hash, B树。。

3.索引的使用:区分单列索引及联合索引:

举例如下:
查询语句“select * from t1 where c1=1 and c2=2”中,

Case1:c1列和c2列上分别建有索引ic1、ic2,那么先使用ic1(或ic2)进行过滤,产生的结果集是临时数据,不再具有索引,所以不可使用ic2(或ic1)进行再次过滤。

Case2:假设存在组合索引it1c1c2(c1,c2),那么查询语句“select * from t1 where c1=1 and c2=2”将能够使用该索引。

并且查询语句“select * from t1 where c1=1”也能够使用该索引。但是,查询语句“select * from t1 where c2=2”不能够使用该索引,因为没有组合索引的引导列,即,要想使用c2列进行查找,必需出现c1等于某值。

因此,where条件语句写的顺序对索引来讲,是至关重要的。

四。补充

发信人: fre (自由), 信区: Java
标 题: Re: 面试知识点---数据库的索引
发信站: 武汉白云黄鹤站 (2008年10月15日20:57:29 星期三)

补充一下:Oracle为例
一、索引还有
1、基于函数索引,比如 select * from stu where upper(name) ='KING';
如果没有索引,将是一个全表扫描
2、位图索引,t(gender,location,age_group,data)有1000万条数据,其中gender、lo
cation、age_group是高度重复的,
对 select * from t where gender='M',and location in(1,2,3) and age_group='19-2
5';
使用位图索引最好,可以通过and 或者 or运算发快速确定
位图索引只适合读密集型操作,因为索引指向表中所有行
二、索引的实现上,对Hash以及B树有各自的适应范围,当好好总结(网易杭研面试问到这
个)
三、索引并不会总增加查询的速度,比较经典的2-5规则,一般情况下当读取小于表中数据
的最高5%时才会使用索引,因为数据库堆表中,数据的存放没有次序,使用索引可能会导
致数据块的重复读取,从而比全扫描的代价还高
三个方面,索引的实现由哪些(内部机制)?有哪些索引(使用场合)?索引对DML的影响

当然还可以考虑对REDO的影响

五。。个人继续补充(Oracle)

1.hint

2.RBO/CBO

3.执行计划
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: