小步前进之细谈数据库索引

索引

什么是索引?

当我们在遇到不懂的汉字的时候该怎么办?查字典。根据拼音查,根据部首查,这就是索引应用的实例。
百科定义

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中特定的信息。

数据库索引的主要目的就是加快检索表中的数据,好比一本书的目录一样,

能帮助你快速定位。

如果新华字典没有索引,那可能最后一页的字你需要从第一页翻到最后一页,

这是多么令人绝望的事情。

索引根据存储结构又可划分为聚集索引非聚集索引两种。

聚集索引

聚集索引基于数据行的键值在表内排序和存储这些数据行。 每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。–百科

以上就是官方的话,事实上,聚集索引就是我们所熟知的字典的拼音查询,

我们将汉字的拼音开头按照A-Z排序,随后我们查找“安”字我们

就可以找到A下面的安在第几页,从而提高查找效率,索引也是如此。

数据总是要有排序规则的,这个规则需要以什么为标准就是我们熟知的索引。

心得:当我们创建id时,数据会按照id排序,这就是聚集索引,

我们可以根据指定的id来查询特定的值,这是效率最高的。

例如:根据你的员工编号或者学生编号来查询你的信息,会大大提高查询效率。

每个表只能有一种聚集索引,因为只能按照一种索引进行排序。

PS:主键是一种特殊的索引,如果创建表的时候表中一个聚集索引都木有,

同时创建时没有强制指定使用非聚集索引,则主键会自动创建为聚集索引,否则为非聚集索引。

非聚集索引

下面的表总结了何时使用聚集索引或非聚集索引(重要):

动作描述使用聚集索引使用非聚集索引
列经常被分组排序
返回某范围内的数据不应
一个或极少不同值不应不应
小数目的不同值不应
大数目的不同值不应
频繁更新的列不应
外键列
主键列
频繁修改索引列不应

参考
https://www.cnblogs.com/become/p/9173538.html

从栗子话索引

关系型数据库大都采用B-tree结构的索引。
在这里插入图片描述
上图为最简单的索引,即只有一个字段ID,范围0~250。

从图中可以看到,最上层为根索引,将最底层的索引0~10提取为一行,最上层将第二层0-40提取为一行。

如果要查ID=223,我们先要从根节点查,然后查第二层,最后查最后一层,则只用3次即可查到对应结果。

需要注意的是,只有非聚集索引才需要用指针去数据表查询对应的行数据。对于聚集索引来说,叶节点就是表本身,因此省了这一步。

SQL Server仅提供B-tree结构的索引。其它关系型数据库也都使用B-tree,但某些产品提供一些增强。例如Oracle还提供Bitmap-index,mySQL提供Hash index。

参考索引与执行计划

作者信息
2年crud码农一枚,文章主作笔记之用,如有错误请指正,如果侵权请告知,立删。如果本文对你有所帮助,请点赞,谢谢。

posted @ 2020-05-06 11:12  OneByOneDotNet  阅读(48)  评论(0编辑  收藏  举报