数据库索引技术 - zzyoga/JustTest GitHub Wiki
1.索引的概念和作用
索引是一种辅助索引结构,为了帮助提高查询速度。索引一般包含的是索引字段和指针。
索引的组织方式有两种(对应主文件的组织方式有四种:堆文件、排序文件、散列文件、聚簇文件):
- 排序索引文件:按照索引字段的某一种顺序组织存储。
- 散列索引文件:按照索引字段使用散列函数分配散列通的方式存储。
有索引文件的话,更新操作必须同步更新索引文件和主文件,否则查询会出错。
2.SQL语言中关于索引的基本知识
当定义Table之后,如果定义了主键,系统将自动创建主索引,利用主索引对Table进行快速定位,检索和更新。
同时索引可以由用户创建和撤销,创建之后由DBMS管理。:X/OPEN中 SQL关于索引的语句
CREATE [unique] INDEX indexname ON tablename(); 撤销索引DROP INDEX indexname
eg: create index idxSname on student(sname,sclass);
3.稠密索引和稀疏索引
稠密索引:对于主文件中每一个记录(每一个不同的值)都有一个索引项和它对应,指明该记录所在的位置。 稀疏索引:对于主文件中部分记录有索引项和它对应。
Q:稀疏索引如何定位? A:首先找相邻的小于K的最大索引字段值对应的索引项,从该索引项所对应的记录开始顺序的进行Table检索(要求主文件必须按索引项顺序存储)。
相比于稠密索引,稀疏索引占用空间少,维护任务轻,但是速度慢。平衡:索引项不指向记录,而是按照存储块来做索引,这也叫做主索引。
Q:在稠密索引中,如果索引字段是非候选键的话,可能出现一个索引对应多条记录的情况怎么办? A:主文件必须在每个索引字段中顺序存储;或者我们的索引项可以重复出现也可以;或者前两个都不用,通过在索引文件和主文件之间引入一个中间层(指针桶)达到目的,每个索引指向一个指针桶,指针桶指向多个记录。
4.主索引和辅助索引
主索引:之前提到过,就是每一个存储块对应一个索引项,索引项的总数和存储表所占的存储块的数目相同,存储表存储的每一块的第一条记录又称为锚记录(anchor record),或者称为块锚(block anchor)。
辅助索引:定义在主文件的任一或者多个非排序字段上的辅助存储结构。辅助索引是稠密索引。
一个主文件仅可以有一个主索引,但是可以有多个辅助索引。
5.其他类型索引
聚簇索引:是指索引中邻近的记录在主文件中也是邻近存储的。
非聚簇索引:索引中邻近的记录在主文件中不一定是邻近存储的。
倒排索引:对一个文档来说,倒排索引是:一个字汇包含在哪些文档中,即 关键词--->文档
多级索引:B树/B+树
散列索引,网格索引等。