【学习笔记】数据库基础 - 索引

基本内容概述

在这里插入图片描述

什么是及为什么需要索引

生活举例

索引能够加快我们查找的速度。
索引也可以理解为对于具体、大量的内容的一种抽象。其大多时候的作用起到了指示的作用,因为索引中包含的信息有限。
可以假设生活中如果没有索引的情况:

1.一本书没有了目录,你查找某块内容将变得效率低下;
2.如果没有地图,你很难明确自己的位置(尤其是到一个新地方的时候);

在这里插入图片描述

索引的概念

索引,在数据库系统中,可以理解为一种辅助数据结构。用于加快查询时的速度。
在这里插入图片描述

索引的形式大致如下:
在这里插入图片描述

索引的一般性特点

在这里插入图片描述
在这里插入图片描述
示例:
在这里插入图片描述

关于索引的评价

综合这些因素,对索引进行评价,确定是否需要建立索引,以及建立怎样的索引。

极端的反例】现在有一张500万行的表,需要对其建立索引,加快查询速度。这个表大概有20个属性。我是个不太了解索引的人,觉得建立索引就一定能够加快速度,于是我对这20个属性建立了联合索引,心里感觉还挺爽。然而事实却是这样做的速度太大了,为何?
原因】你对每个属性建立索引,相当于把整个表又在索引中复制了一遍,然后算上B+树的层次,可能占用的空间比主表还要多。这样浪费了大量的空间。且并不是这20个属性在查询时都作为条件等语句出现。当然速度可能会有一些提升,毕竟B+树能够做到一定的剪枝作用,而不像最初没有索引一样扫描全表。(但这这种建立索引的方式的代价太大,不提倡)
原则建立索引应该保持适度的原则

在这里插入图片描述

对哪些属性建立索引

在这里插入图片描述

其它一些概念

在这里插入图片描述

SQL 语言关于索引的基础知识

在这里插入图片描述

稠密索引 & 稀疏索引

在这里插入图片描述
示例:
在这里插入图片描述
在这里插入图片描述

根据索引定位记录

稀疏索引如何定位记录

在这里插入图片描述

在这里插入图片描述

稠密索引如何定位记录

先查索引,然后再依据索引读主文件.
在这里插入图片描述

非候选键属性的稠密索引 (3种情况)

注意观察其索引结构的设计

情况1:(有序表)
在这里插入图片描述

情况2:(无序表)
在这里插入图片描述

情况3:(无序表的优化,引入中间桶)
在这里插入图片描述

主索引 & 辅助索引

这里采用了另一种分类角度:即 是否是针对主键(排序字段)的索引,分为了主索引 及辅助索引

主索引

在这里插入图片描述

示例在这里插入图片描述

辅助索引

在这里插入图片描述

在这里插入图片描述

对比主索引 & 辅助索引

在这里插入图片描述
示例:
在这里插入图片描述

其它结构的索引

多级索引

在这里插入图片描述

其它

在这里插入图片描述

B+ 树索引

== 这里主要探讨B+树索引的应用。(后续的文章,再去单独剖析B+树这一数据结构的细节)==

多级索引

B+ 树的作用主要用来建立多级索引。
当索引项比较多时,可以对索引再建立索引,依此类推,形成多级索引。(B+树实现了自动调整索引层次的方法)
在这里插入图片描述

B+树的基本概念

在这里插入图片描述
在这里插入图片描述

B+树的存储约定

索引在磁盘中占用的空间,远比主表要小。(IO少,检索快)
在这里插入图片描述

== 叶子结点与非叶子结点的内容是不同的:==
在这里插入图片描述

B+树应用示例
在这里插入图片描述

B+树的平衡

参加数据结构中对于b+树的操作。
在这里插入图片描述

用B+树建立不同的索引

接下来,用B+树来实现前面所提到的该类索引的概念。

用B+树建立键属性稠密索引

在这里插入图片描述

用B+树建立稀疏索引(或主索引)

在这里插入图片描述

用B+树建立非键属性稠密索引

在这里插入图片描述

用B+树建立非键属性稠密索引

在这里插入图片描述

用B+树建立非键属性稠密索引

在这里插入图片描述

散列索引(待定。。。)

参考

数据库系统(下):管理与技术

猜你喜欢

转载自blog.csdn.net/TheSnowBoy_2/article/details/88618903