6.3 索引技术
4 Y- I7 w0 l1 W1 J+ D+ \9 a6.3.1 基本概念
& J* m) V. Y9 n2 D- f7 T1、 索引技术:是一种快速文件访问技术,它将一个文件的每个记录在某个或某些域(属性)上的取值与该记录的物理地址直接联系起来,提供了一种根据记录域的取值快速访问文件记录的机制;它的关键是建立取值域到记录的物理地址刘的映射关系,这种映射关系叫索引;6 W5 x7 c4 `! D( t
2、 索引技术分类:
3 z2 ?1 |. O6 j* U, _(1) 有序索引技术:利用索引文件实现记录域(查找码)取值到记录物理地址间的映射关系,索引文件由索引记录组成,每个记录中记载一个索引项,索引项记录了某个特定的查找码值和具有该值的数据文件记录的物理地址;
6 F6 J( P' M9 b7 L$ I(2) 散列技术:利用一个散列函数实现记录域取值到记录物理地址间的直接映射关系;- M8 b# |% ^" R( q0 C2 ~( O( u) L
(3) 有序索引:有序索引作为基于索引文件的索引技术,需要考虑两个问题:(1)如何组织索引文件中的索引记录;(2)如何从索引文件出发,访问数据文件中的数据记录;
i3 e. F+ \$ Q( u; V6 u(A) 当需要采用有序索引机制快速访问数据文件时,首先要为该数据文件建立一个索引文件,它是索引记录和索引项的集合;
3 ^" R, | w6 Z- w/ R; j(B) 索引文件建立的方法:首先选定某些记录域作为查找码,然后建立数据记录在查找码上的取值与物理地址间的映射关系,组成索引项。所有索引项作为索引记录存储在索引文件中,索引文件根据某个特定的查找码值的顺序组织为顺序文件;
E# _# L3 y' |$ S2 U$ u(C) 一个数据文件可以有多个查找码和索引文件;0 M) B, y- T/ E( w! ]& |
6.3.2 有序索引的分类及特点
9 w0 G- d. t+ {0 r+ D( t6 \8 s* b$ p1、 聚集索引与非聚集索引
1 V" [# e2 O$ n% H1 _) A4 |(1) 对数据文件和它的一个特定的索引文件,如果数据文件中数据记录的排列顺序与索引文件中索引项的排列顺序相一致,则该索引文件称为聚集索引,否则称为非聚集索引;
4 ], y6 H7 w }8 g8 B(2) 在一个数据文件上除了建立一个聚集索引外,还可建立多个非聚集索引;# h1 }. W/ G5 m( K& X7 h# \
2、 稠密索引和稀疏索引. W' W; t" Q' @: T" s0 w8 w
如果数据文件中的每个查找码都在索引文件中都对应一个索引记录,称为稠密索引,如果只一部分对应,则称为稀疏索引;: b2 } k7 ~( `/ r) K" q, e& o
3、 主索引和辅索引1 \4 d, `: ~3 |4 O
在数据文件包含主码的属性集上建立索引称为主索引,在非主码属性上建立的索引称为辅索引;" k$ o9 s f+ r B" }4 X1 d
4、单层索引和多层索引
$ a# H+ S* h; \; Q! D, F(1) 单层索引(线性索引):索引项根据键值在索引文件中顺序排列,组织成一维线性结构,每个索引项直接指向数据文件中的数据记录;# r0 y2 J' t. f; e+ m8 t
(2) 当数据文件很大时,即使采用稀疏索引,建成的索引文件也很大,导致效率低下,为解决该问题,可对索引文件中的索引项本身再建立一级稀疏索引,组成2层索引结构;进一步地,可建立多层树型索引结构来快速定位;
5 A: C4 a0 ^2 T+ b; i H6.4 散列技术- b1 n$ U; ~& K( X' q
6.4.1 散列文件$ P- H& [; u+ k; P
1、 散列是一种快速查找技术,它利用定义在文件记录上的查找码,通过计算一个散列函数,以散列函数值作为记录的物理地址,实现对文件记录直接快速访问。& U, t& f. B0 o' _4 D, g+ P6 ?/ I6 \$ |
2、 首先指定文件记录的一个域作为查找码(散列域),然后定义一个查找码上的函数(散列函数),函数的输入为查找码值,输出为物理地址;3 _" ^4 m0 f6 [- s1 G' {
3、 一般使用桶作为基本的存储单位,一个桶可存放多个文件记录,物理地址可以是记录所在的桶号,散列函数的输出可以是桶号;
( [5 L1 e" _9 e5 i& K! ?6.4.2 散列函数
( W) c- |$ v1 l& R- G! J. f1、 散列方法依赖于好的散列函数,它应该尽可能均匀地将查找码分布到各个桶中,具体要满足如下两个条件:5 d; [3 X" }5 p1 A! j; }3 ?- ~
(1) 地址的分布是均匀的;
2 W8 s2 |6 Q' q7 {; O' n(2) 地址的分布是随机的;4 [2 k. e$ c# p5 w5 ~1 K. T
6.4.3 桶溢出
3 m3 K x4 ]- J% @) d0 j& S$ Z5 C1、 产生桶溢出的两个原因:8 ?$ |' G5 p J7 ?0 s& Y
(1) 文件初始设计时,为文件记录预留的存储空间不足;/ \, o& v# W4 a( o8 j
(2) 散列函数的均匀分布性不好;9 b! w! Q9 v: L' W, b5 w
2、 设计散列函数时,应根据文件大小决定物理空间,一般应有20%余量,再设计合适的桶数目和桶大小,尽可能留有一些空闲桶,降低桶溢出的可能性;
0 G q9 Y+ z. c: p: S) C3、 桶溢出的现象是难免的,需要DBS采用相应的桶溢出处理机制;8 ~& v7 p6 g: J. }
4、 散列方法的缺点:为了避免桶溢出。必须选一合适的散列函数,但这比较复杂,而且不象索引文件那样可以据数据记录变化动态调整。 |