数据库索引的建立
主索引
数据在磁盘上是按块进行存储的。所以当一张表存储在磁盘上时会被分成好多个存储块。
主索引通常是对每一存储块有一个索引项,索引项的总数和存储表所占的存储数目相同,存储表的每一个存储块的第一条记录,又称锚记录,或称块锚。使用主索引有以下特点:
- 主文件中的记录有序,比如按主键大小排序(下图中的C#)。
- 索引字段一般使用主文件中的排序字段,比如下图中的C#。索引字段值一定来源于块锚。
- 索引项中的指针指向每个块在磁盘中起始位置
- 索引项有序,按索引字段值排列
- 主索引是稀疏索引
辅助索引
辅助索引是定义在主文件的任一或多个非排序字段上的辅助存储结构。辅助索引通常是对某一个非排序字段上的每个不同值有一个索引项。辅助索引一般需要借助中间链表来实现。因为其是稠密索引,所以检索效率比较高。
主索引和辅助索引的对比
一个主文件仅有一个主索引,但可以有多个辅助索引
主索引通常建立在主码/排序码上面;辅助索引建立在其它属性上面
可以利用主索引重新组织主文件数据的存储结构(比如对整个表进行重排序),但是辅助索引不能改变主文件数据。简单而言辅助索引只能做查询操作。
聚簇索引与非聚簇索引
聚簇索引:在索引中临近的记录在主文件中也是临近存储的。如果主文件中的某一排序字段不是主码,则该字段上的每一个记录取值便不唯一。此时该字段被称作聚簇字段;聚簇索引通常是建立在聚簇字段上的。聚簇索引通常对聚簇字段上的每一个不同值建立一个索引项。由于相同聚簇字段值的记录肯能存储在若干块中,则索引项的指针指向其中的第一个块。
非聚簇索引:是指索引总邻近的记录在主文件中不一定邻近存储的。
一个主文件只能有一个聚簇索引文件,但可以有多个非聚簇索引文件。
主索引通常是聚簇索引,辅助索引通常是非聚簇索引。
主索引/聚簇索引是能够决定记录存储位置的索引,换句话说,如果要想往Table中插入一条记录,可以在主索引上进行操作。而非聚簇索引只能用于查询。