一.前言

在平时自己使用数据库的时候,个人用的数据库一般不大,十万条也可能。不过对于公司来说,单表数据量上到千万、亿级也很常见,而对于这么庞大的数据量做查询,换成人来做,简直不可能,可一些大公司就轻易做到上亿数据的毫秒查询。而这里介绍下索引的内容和平常我经常用到的优化方式

1.索引

在了解如何优化前,我们要知道数据库是怎么快速找到数据的.先来举个例,我们人对于非常大量无序数据的查找,是很无力的,我们只能一个个确认,比如一排药柜,我们只能一个个标签看过去,第一个柜子是什么药,然后下一个下一个,直到找到需要的药为止。至此就发现,即便是药柜不超过百的数量级就非常耗时,耗资源了。

image.png
那,如果是字典呢?庞大的信息,厚重的知识的力量,我们完全没办法掌握这份力量。
几乎没人能做到我给一个字他,他能瞬间知道这个字在字典哪一页

所以,在生活中,我们引入了一种东西 目录
image.png

即便是我们使用字典,也是通过笔画或者拼音的顺序去找。比如根据字典所有字的记录都有顺序 bai 字肯定在 ai 字后面,我们找bai字,自然会跳过a开头的全部字,然后在目录找到bai字所在的大概页数,不用一页一页翻,大大缩短了查字的时间

而索引,就是这样的一个东西

索引类似一种排好序的目录,而底层理念,是树
应该都听过树,而目录也是一种树,按照不同的区块划分不同的子叶,提供快速查询用。

先来看看我们数据库的索引(目录)是怎样的

实际上,很明显能看出这个跟我们字典的按字母查字大同小异
1.我们要查询的东西,是已经经过一定的排序了
2.通过不同的查询内容进行分区,快速排除无关的数据

快速查询,其实也可以说是快速排除无关数据法。

如我们的树结构,

对于不同的数据库,所用到的索引类型是可能不一样的,比如Sql Server和Mysql 5.7(InnoDb)的索引类型是B+树

Q.E.D.


随意游世