知识点回顾 | 数据库优化-索引

Posted 一起写程序

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识点回顾 | 数据库优化-索引相关的知识,希望对你有一定的参考价值。

知识点目录:



问题目录:

索引:

问题1)数据库存储的映射关系?也就是记录是如何存储在磁盘上的?

2,索引的简单分类

问题1)为什么需要索引和索引的概念?

问题2)索引的组成部分?

问题3)索引文件的存储结构?

问题3)索引的一般特性?

问题4)索引存在的问题?

问题5)评价索引性能的好坏?

问题6)稀疏索引和稠密索引?

稀疏索引:索引项是主文件中的部分记录。

问题6.1)稀疏索引如何定位记录?

例子:定位索引字段为k的记录?

稀疏索引的优缺点:

问题6.2)如何解决稀疏索引相对稠密索引速度慢的方法?

问题6.3)稠密索引如何确定主文件中的记录?

候选键的稠密索引:

非候选键的稠密索引:

非候选码的三种对比:



问题1)数据库存储的映射关系?也就是记录是如何存储在磁盘上的?

 

表,记录,磁盘块之间的关系?

一个表一个索引文件,索引文件的索引项是记录和磁盘块。

如何找到一条条记录的?

首先找到那张表,再找到表的索引文件,通过索引项记录找到磁盘块。

 

索引:

内容:1,为什么需要索引与索引的定义?

2,索引的简单分类

3,B+树索引。

4,散列索引。

 

重点:1)理解索引的作用?应用索引优化改进数据库查询性能的方法?

      2)理解不同类型索引的概念:稠密索引和稀疏索引,主索引和辅助索引,聚簇索引和非聚簇索引,倒排索引,多级索引等。

3)理解B+树索引,怎么建立,维护和利用B+树索引(算法层面)

    4)理解散列索引,包括静态散列索引与动态散列索引(算法层面)

问题1)为什么需要索引和索引的概念?

主要借鉴了字典的设计,字典有索引,索引项包括关键字和页码。

如果直接在主文件上进行查找,内存无法全部装载下,需要进行外查找,这样的消耗是很大。

索引文件要小的多,索引文件可以全部装载到内存中,快速定位后通过行指针去主文件中查找。

 

索引定义:索引是建立在存储表(table)基础之上,有助于无需检查所有记录而快速定位一种辅助存储结构。

 

问题2)索引的组成部分?

索引文件是由索引项组成。每个索引项包括两部分,索引字段和行指针。

索引字段:主文件中的某些列。(通常存储这些列的所有值(稠密索引),存储的是字段的部分值(稀疏索引))。

行指针:指向主文件中字段值在磁盘上的存储位置。

 

知识点回顾 | 数据库优化-索引


索引文件:存储索引项的文件

主文件:存储表(table)就是主文件。

 

问题3)索引文件的存储结构?

散列索引文件:

排序索引文件:

 

问题3)索引的一般特性?

1,一个表上可以有多个索引文件,每一个索引文件的索引项可以包括多个属性。

2,主文件有索引时,更新操作必须同步更新索引文件和主文件。否则出现数据不一致。

索引的更新是DBMS管理系统自动做的。

3,索引文件是一种辅助的存储结构,其存在与否与主文件没有影响。

 

问题4)索引存在的问题?

索引虽然提高了查找的效率,但同时增加了存储空间和维护成本。(主文件更新,索引文件也要更新)

 

问题5)评价索引性能的好坏?

访问时间

插入时间

删除时间

空间负载

支持存取的有效性:比如:支持的是属性的限定值(是否符合单一值,还是支持属性的限定范围的值(是否符合一定范围))

 

问题6)稀疏索引和稠密索引?

对于主文件中每一个不同值记录(包含重复索引字段),都有一个索引项和它对应,指明该记录所在位置,这样的索引称稠密索引(dense index)

 

稠密索引索引项和所有不同值记录一一对应

 

知识点回顾 | 数据库优化-索引

 

非稠密索引(稀疏索引):

对于主文件中部分记录有索引项和它对应,这样的索引称非稠密索引undense index)。

稀疏索引:索引项是主文件中的部分记录。

 

知识点回顾 | 数据库优化-索引

 

 

问题6.1)稀疏索引如何定位记录?

注意:

1, 稀疏索引文件中不存在搜索码的值,不代表主文件中没有对应搜索码的记录。

2, 使用稀疏索引,主文件必须是按索引字段属性进行排序存储。

例子:定位索引字段为k的记录?

首先找到小于k最大索引项

从该索引项对应的主文件记录开始顺序进行table的检索。

 

稀疏索引的优缺点:

优点:占用空间更小,维护任务更轻。

缺点:相对稠密索引速度慢。(因为不是直接找到主文件中的记录)

 

问题6.2)如何解决稀疏索引相对稠密索引速度慢的方法?

让索引项不指向记录指针,而是指向记录所在的存储块的指针,即每一存储块有一个索引项,而不是每条记录有一索引项 --- 主索引

 

问题6.3)稠密索引如何确定主文件中的记录?

注意:

1, 无论是候选键属性的稠密索引,还是非候选键属性的稠密索引,索引文件中不存在的搜索码的值,就代码主文件中没有对应搜索码的记录。

2, 候选键: 可以唯一标识一条记录的属性集合。

候选键的稠密索引:

因为候选键是唯一的,所以索引项和主文件记录是一一对应的。

非候选键的稠密索引:

第一种:索引字段排序不重复,主文件按照(非候选码)索引字段排序存储。

 

知识点回顾 | 数据库优化-索引

第二种:索引字段排序重复。主文件不用按照索引字段排序。

 

知识点回顾 | 数据库优化-索引

第三种:如果要求索引字段排序不重复,并且要求索引字段和主文件字段一一对应。引入中间桶。

 

 

非候选码的三种对比:

 

 

 




以上是关于知识点回顾 | 数据库优化-索引的主要内容,如果未能解决你的问题,请参考以下文章

第244天学习打卡(知识点回顾 索引)

第217天学习打卡(MySQL知识点回顾 覆盖索引 ACID原则)

数据库基础知识回顾

知识点:Mysql 索引优化实战

数据库基础知识回顾

数据库基础知识回顾