从MySQL底层理解并优化Limit实战

本文深入探讨了MySQL中的BTree索引和Limit优化。通过理解BTree索引的结构,解释了普通索引和聚集索引的工作原理,并通过实验验证了Limit在全表扫描和索引查询中的性能差异。提出了优化Limit查询的策略,包括使用延迟查询和子查询,显著减少了回表操作,提升了查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在招聘开发中,我看到简历上面只要写了熟悉SQL优化我就会问他:limit 如何优化?

因为在系统中随着业务的发展数据库表存储的数据越来越多,原先的SQL在没做优化的情况下会变得越来越慢稍不注意就会造成我们线上系统的崩溃。

大多数都说连表查询(延迟查询)、子查询这两种,只有一个说是看场景。确实,如果场景业务不复杂没有什么过滤条件那么使用主键自增ID进行范围查询无疑是一个最好的选择!但我问为什么要这么做时却没人能够回答出来。

BTree索引(innoDB)

首选我们新建索引的普遍都是使用BTree索引,而BTree索引的数据结构则是B+Tree。所谓知己知彼百战百胜,只有先了解B+Tree的结构才能更好地进行优化!(盗用百度上的一张草图 哈哈哈)

从这个结构上,第一层跟第二层存储只是索引并不是真正的数据直到第三层时则是真正的值。例如这个是age字段的索引,执行select * from user where age = 5 语句,根据这个图则需要做三次IO操作才能准确找到5。首先在第一个节点【8,15】比较值,小于8则访问左节点【2,5,8】,在左节点中虽然有5但还是需要继续向下访问节点【3,5】,由于【3,5】没有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值