02-MySQL索引

本文详细介绍了MySQL的索引类型,包括hash表、有序数组和B+树,并探讨了各种数据结构的优缺点。此外,还讨论了主键索引、二级索引、覆盖索引和联合索引的特性,以及索引下推优化在提升查询性能中的作用。
摘要由CSDN通过智能技术生成

索引

数据库的表就如同一本厚厚的字典.字典里面有我们想要查询的数据.
但是呢,一页一页地翻,然后去找到相应的内容.真是太漫长了.

索引呢,就如同字典的中的目录.通过索引我们可以快速地定位想要查询的内容.
然后呢,当然就去找咯!

索引的数据结构类型

索引的数据结构有三种.

  • hash表
  • 有序数组
  • B+树
hash表

hash表大家都很熟悉了.根据某一个条件,然后把数据尽可能地均匀地分布.然后在不同的桶中.
一般就是一个数组,然后每个数组中的元素是一个链表.

但这样数据量少,还不错.但是数据量一旦上去了.每次查询就可能遍历链表中的很多数据.
会有很多时间上的不足.

有序数组

有序数组,顾名思义.数组中的元素是有顺序地.那么这样查询起来就会很快.
用二分查找 O(log n) 就可以了.

但是,我们知道数组的查询快,但是插入和删除都很糟糕.如果要是在数据前面插入或者删除第一个.
整个索引就相当于都重新排列了一下!

不同的应用场景,需要选择不同的数据库索引.

如果说,这个数据库索引类型,可以被替代,或者有什么更好的解决方案.那么就不会存在在现有的数据库中了.

在静态数据中,使用有序数据是非常有用的.
例如在去年的工资统计中,数据不会进行修改或者新加,那么有序数据就是一个很好的选择.

B+树

B+树.这里我对B+树的了解不够.不敢妄言.

我只知道B+树,在叶子节点中存储数据.而且还是有序的数据.
查询和修改都是非常快速的.

MySQL中的B+树,是N叉树.因为索引也是在磁盘中的.

索引的类型

主键索引

主键索引,一般一个表都需要一个主键作为索引.
但为啥主键一般都是递增的呢?

因为无论那种数据结构的索引,在新加数据时,如果索引是有序增加的.
那么,索引就能很方便地加入进去.

  • Hash索引,希望分布在每个桶的数据是差不多的.有序的话,几乎就是平衡的.
  • 有序数组,就更不用说了.如果是新增直接加到后面就好了.
  • B+树

记住,数据删除了.但是索引可不会.

二级索引

除了主键之外的索引是二级索引.

二级索引的创建,可以进一步加快sql的查询.

这时,我才突然明白了一个之前的sql优化.

SELECT id FROM user
WHERE name = 'hello'

如果在name上加入了索引.那么查询user表时,只查询id
会立刻返回结果,而不用回表.

这里就涉及到一个非常重要的概念 回表.

在数据库索引(B+树)中,每个叶子节点都按照顺序存放着数据.

mysql> create table T (
ID int primary key,
k int NOT NULL 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值