小步前进之细谈数据库索引
索引
什么是索引?
当我们在遇到不懂的汉字的时候该怎么办?查字典。根据拼音查,根据部首查,这就是索引应用的实例。
百科定义
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中特定的信息。
数据库索引的主要目的就是加快检索表中的数据,好比一本书的目录一样,
能帮助你快速定位。
如果新华字典没有索引,那可能最后一页的字你需要从第一页翻到最后一页,
这是多么令人绝望的事情。
索引根据存储结构又可划分为聚集索引和非聚集索引两种。
聚集索引
聚集索引基于数据行的键值在表内排序和存储这些数据行。 每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。–百科
以上就是官方的话,事实上,聚集索引就是我们所熟知的字典的拼音查询,
我们将汉字的拼音开头按照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码农一枚,文章主作笔记之用,如有错误请指正,如果侵权请告知,立删。如果本文对你有所帮助,请点赞,谢谢。