MySQL之SQL优化

文章探讨了在大数据量下进行SQL翻页查询的优化方法,对比了使用LIMIT和OFFSET的传统方法与先查找ID再进行内连接的方法。传统方法由于多次IO操作和回表导致执行时间较长,而优化方案利用覆盖索引和避免回表显著提高了效率。
摘要由CSDN通过智能技术生成

SQL优化

1,翻页优化

简介:在日常查询中翻页必不可少同样也就离不开limit,offset的使用,其简单使用就不做介绍了,主要介绍上千万数据如何优化,用单表5000w的数据量进行测试,请看下方sql以及注释
需求:获取从1000w开始的50条数据

	# 方案 1:
		select * from table limit 10000000,50
		
		exec time (30 min 4.20 sec)
		
	# 方案 2
		select * from table as a
		inner join
		(select id from table limit 10000000,50) as b 
		on a.id = b.id
		
		exec time (6 min 53.76 sec)
结论:
	从执行时间上看相差很大,分析原因:
	方案1之所以允许时间长有几个原因,
		,mysql查询时,经过多次io操作,查找出 offset  + limit 的数据总和,然后在返回50条,
		,做了回表操作,因b+tree的非叶子节点只存放聚簇索引,辅助索引,需要进行回表操作获取具体数据
	方案2,之所以快有以下几个原因
		,先查出id,该查询用了覆盖索引,查询效率会很快
		,因id是主键也就是聚簇索引,在获取具体field时避免了回表操作(二次查询)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值