基本内容概述
什么是及为什么需要索引
生活举例
索引能够加快我们查找的速度。
索引也可以理解为对于具体、大量的内容的一种抽象。其大多时候的作用起到了指示的作用,因为索引中包含的信息有限。
可以假设生活中如果没有索引的情况:
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+树来实现前面所提到的该类索引的概念。