一句话串讲MySQL数据库索引

文章讲述了MySQL的两种主要存储引擎InnoDB和MyISAM的特性,InnoDB强调事务安全和支持行级锁定,而MyISAM侧重于读取速度和大容量存储。B+树索引在两者中都有应用,但InnoDB的索引包含数据行信息,提高查询速度。文章还讨论了如何优化查询效率,包括使用覆盖索引和观察执行计划来判断索引使用情况。

MySQL支持多种存储引擎,常用的就是InnoDB和MyISAM。 MyISAM支持256TB的数据存储,访问的速度很快。但是不支持事务和外键,并且由于表级别的锁限制了MyISAM读写方面的负载性能,所以它更适合只读的数据场景。InnoDB是事务安全的,它支持事务提交、回滚还有崩溃恢复的能力,并且行级别的锁定提高了多用户并发数还有性能。相比于MyISAM而言,InnoDB写的能力要差一点,并且还要占用部分磁盘空间来存储索引和数据。并且InnoDB支持外键,提高了数据完整性。

索引是存储引擎支持的,也就是说不同的存储引擎会使用不同的索引。InnoDB和MyISAM都支持B+树的索引,InnoDB的B+树索引与MyISAM的不同之处在于,它除了存储索引信息外,还要存储数据行的信息,因此可以实现更快的查询速度和更高的并发性能。 

索引为数据提供了一个二叉树结构,我在使用索引查询时不需要全表扫描,这样提高了查询效率。B+树索引是一种二叉树的变种,二叉树的问题是如果依次插入递减或者递增的数据,会逐渐退化成链表结构,导致树结构不平衡,树太高了,降低了查询效率;B树的缺点是叶子节点没有指针相互连接。B+结构优化了先前树结构行级过高、树失衡IO次数较多的问题。它的非叶子节点只存储索引,多个索引之间保存下一层节点地址。叶子节点只存储数据、并且有序排放。所以注意使用组合索引的时候,要遵循最左原则依次写查询条件。如果上来就写组合索引后面的条件或者使用%放前面的模糊查询会造成索引失效

通过给主键创建索引,在叶子节点存储主键对应的一整条数据,并且叶子节点存储了上下游数据信息,所以说合理的范围查询也可以命中索引;非主键索引的数据结构则是在叶子节点存储索引值和主键信息,定位到索引后再拿着主键信息到主键索引去查询,这个过程也叫回表。所以为了提高查询效率,我们尽可能在写SQL的时候使用覆盖索引,让查询的结果集可以通过索引直接拿到,减少回表操作带来的消耗。

如果要查看是否使用到索引,可以通过explain执行计划,在sql语句前加一个explain,我们比较关注rows看读取的记录数是否过大、type尽量追求const常量、eq-ref主键索引/唯一索引,ref普通索引,避免All全盘扫描。Key可以看使用了哪个索引。

好啦,这一篇先更这么多,你的喜欢和点赞是对我最大的鼓励,欢迎评论区点评哦!

我是梦卿,让我们一起做【先进、纯粹、最高版本】的自己吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值