mysql--通俗易懂的索引

1、什么是索引?

索引是帮助数据库高效获取数据的数据结构。比如你之前没加索引,sql语句执行需要1秒,加入索引后可能需要0.1秒

2、索引类型有哪些?

索引常见类型主要有二叉树、hash表、B树

1)二叉树:

定义:每一个节点有2个子节点,左侧节点小于父节点,右侧节点大于父节点。

极端情况:每一个节点都只要右侧节点,而且所需要的值正好在最后一个节点上,此时相当于全表查询。

缺点:树的层数太高,查询速度慢

2)hash表:

定义:对所创建的列进行hash计算,将hash值作为key,value就是指向数据的指针。计算出来的同一个hash值,索引以链表的形式存放多个指针。

优点:对于等值查询速度比较快。

缺点:不能进行范围查询。如果遇到大量hash值相同的情况性能比较差。如果删除某一行,需要遍历所有行,找到对应行的引用,性能差。

3)B树

mysql默认引擎是innodb,默认选择B+树索引。

B+树是平衡多路查找树。系统从磁盘读取数据到内存中,是以磁盘块为基本单位的。位于同一个磁盘快中的数据会同时被一次性读取出来。mysql以页为最小单位,一页默认为16k。

(1)B+树的特点:

①I/O次数少。

B+树是只有叶子节点存储数据和索引键值对,其他节点存储索引键值对。同一页中存储的数据就更多了,层数就会变低。整体呈现“矮胖”

②范围查询快。

B+树的叶子节点以指针的形式连接起来,每一个叶子节点会指向下一个叶子节点的指针。这样范围查找的时候,直接找到一个叶子节点后,就在叶子节点之间进行查询,不需要再从根节点进行遍历。

③查询性能稳定

B+树只有叶子节点会存储数据,所有的查询都必须到叶子节点才能结束。

 

3、聚簇索引、非聚簇索引、联合索引

1)聚簇索引

就是主键索引,在叶子节点存储数据。

只查询一次就可以得到数据库中的数据

2)非聚簇索引

在叶子节点存储的数据是主键的值。

查询到叶子节点后,根据主键的值,再去查找聚簇索引的树,从而找到数据库中数据。这个过程称为“回表”

索引覆盖:查询的列恰好是索引的一部分,查询就只需要在索引文件中进行查找。

3)联合索引(又叫复合索引)

两个或两个以上的列组成的一个索引叫联合索引

注意点:需要注意索引的创建顺序。

因为索引遵循最左原则,从联合索引的最左边开始匹配。比如创建了(a,b,c),如果where条件是a=1 and c=3,那么该索引只能使用一半,即(a,b,c)创建后,支持(a),(a,b),(a,b,c)这三种的组合进行查找。不支持(b)(b,c)等查找。

一般是根据业务需要,使用频率高的放在最左边。

4、索引使用场景

1)可以使用索引

字段有唯一值,where查询条件跟group by和order by后面的列。

2)索引失效

①like查询以“%”开头

②查询条件有计算,有or连接

3)不需要创建索引

①字段值大量重复

②表中数据量太少

5、创建索引时考虑哪些因素

1)数据库开启慢查询日志,设置一个慢查询阀值

2)找到对应的慢查询sql,使用explain命令,分析索引是否生效,有没有全盘扫描,有没有创建索引等。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值