索引底层原理、优化

目录

一、什么是索引

二、索引的优缺点是什么

三、索引的使用原则

四、索引的分类

五、索引的分类(按顺序)

六、聚集索引和非聚集索引的优缺点

七、何时使用聚集索引或非聚集索引

 八、索引底层原理


一、什么是索引

数据库如同书籍,索引如同书籍目录,假如我们需要从书籍中查找到我们想要的内容,我们可以直接从目录中查找,定位到内容所在页面,如果目录中没有相关字符或者没有设置目录(索引),那只能逐字逐页阅读文本查找,效率可想而知。索引是排好序的快速帮助MySQL高效获取数据数据结构一般来说索引本身很大,我们的内存有限所以不可能全部存储在内存中,因此索引往往以文件形式存储在磁盘上。

二、索引的优缺点是什么

优点

1、索引类似于书籍的目录,提高数据检索的效率,减少数据库IO的成本

2、通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗

缺点

1、索引会占据磁盘空间

2、索引虽然会提高查询效率,但是会降低更新表的效率。比如每次对表进行增删改操作,MySQL不仅要保存数据,还有保存或者更新对应的索引文件。

3、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
4、对表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度
5、如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。
6、对于非常小的表,大部分情况下简单的全表扫描更高效。

三、索引的使用原则

(1)下列情况适合为字段创建索引

数据量很大的表

出现在where子句中的查询字段,尤其是进行区间段范围查询的字段

多表连接时的连接字段

排序时的排序字段

分组时的排序字段

取值范围广泛,不重复的字段,如商品编号,订单号

(2)下列情况不适合为字段创建索引

数据量很小的表

不经常查询的字段

取值范围有限,经常重复的字段,如性别

(3)下列情况索引会失效

查询条件中有 is null

查询条件中有<> / not in / not exists

查询条件中有以%开头的like模糊查询

用 or 连接两个查询条件

在索引列上使用表达式或函数

四、索引的分类

根据索引的具体用途,MySQL 中的索引在逻辑上分为以下 5 类:

1、普通索引(索引名:index)
普通索引是 MySQL 中最基本的索引类型,它没有任何限制,唯一任务就是加快系统对数据的访问速度。普通索引允许在定义索引的列中插入重复值和空值。

2、唯一索引(索引名:unique)
顾名思义,唯一索引就是专门为具有唯一约束字段创建的索引。当一个字段被设置唯一约束时,MySql会自动为此字段创建唯一索引。唯一索引列的值必须唯一,但允许有空值。

3、主键索引(索引名:primary key)
顾名思义,主键索引就是专门为主键字段创建的索引。当一个字段被设置为主键时,MySql会自动为此字段创建主键索引。主键索引是一种特殊的唯一索引,不允许值重复或者值为空。

4、全文索引(索引名:fulltext)
全文索引主要用来查找文本中的关键字,只能在 CHAR、VARCHAR 或 TEXT 类型的列上创建。在 MySQL 中只有 MyISAM 存储引擎支持全文索引。

5、空间索引(索引名:spatial)
空间索引是对地理空间数据类型 GEOMETRY的字段建立的索引。创建空间索引的列必须将其声明为 NOT NULL,空间索引只能在存储引擎为 MyISAM 的表中创建。对于初学者来说,这类索引很少会用到。

、索引的分类(按顺序)

根据索引的顺序与数据表的物理顺序是否相同,可以把索引分成两种类型。一种是数据表的物理顺序与索引顺序相同的聚集索引,另一种是数据表的物理顺序与索引顺序不相同的非聚集索引。 微软的SQL SERVER提供了两种索引:聚集索引和非聚集索引。下面,我们举例来说明一下聚集索引和非聚集索引的区别:

我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头,那么“安”字就自然地排在字典的前部。如果翻完了所有以“a”开头的部分仍然找不到这个字,那么就说明字典中没有这个字。也就是说,字典的正文部分本身就是一个目录,不需要再去查其他目录来找到你需要找的内容。我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。如果遇到不认识的字,不知道它的发音,这时候,需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是62页,检字表中“张”的上面是“弘”字,但页码却是44页,“张”的下面是“引”字,页面是56页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到你所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。通过以上例子,我们可以理解到什么是“聚集索引”和“非聚集索引”。进一步引申一下,我们可以很容易的理解:每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序。

六、聚集索引和非聚集索引的优缺点

聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续聚集索引:物理存储按照索引排序;聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序。非聚集索引:物理存储不按照索引排序;非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序。索引是通过二叉树的数据结构来描述的,我们可以这么理解聚集索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。优势与缺点:聚集索引插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入),查询数据比非聚集数据的速度快。

七、何时使用聚集索引或非聚集索引

 八、索引底层原理

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咬口大葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值