大数据下Limit使用(MySQL)
对于一直用Oracle的我,今天可是非常诧异,MySQL中同一个函数在不同数量级上的性能居然差距如此之大。
先看表ibmng(id,title,info) 唯一 id key 索引title
先看看两条语句:
select * from ibmng limit 1000000,10
select * from ibmng limit 10,10
很多人都会认为不会有多大差别,但是他们都错了,差别太大了,(可能机器不同有点差距,但绝对10倍以上)具体执行时间留给好奇的同学。
这是为什么呢,都是offset的错!
优化的话你可以想方法减小offset,如以下:
Select * From ibmng Where id >=( Select id From ibmng Order By id limit 1000000,1 ) limit 10
大家一定会看到问题, limit 1000000,1 同样offset不是一样大吗,肯定不能优化。(但是,又错了,执行之后才知道结果!)
原因是id是索引,所有快,那么如下sql呢:
select id from ibmng where title='mysql' order by id limit 1000000,10;
这条sql大家又会猜错,同样慢的跟蜗牛一样。(在此大家都会想title加了索引啊怎么会这样!)
接下来大家再执行一条sql如下:
select id from ibmng where title='mysql' limit 1000000,10;
执行之后你会发现速度是sousou的快!
原因看出来了吧,都是用了索引的原因,如果你要用select id from ibmng where title='mysql' order by id limit 1000000,10; 那么就追加复合索引(title,id )吧!
注意:接下来与limit无关!
最后回到我现在的场景,如果千万级别的数据分批次读取统计的话,不要使用limit最好,用主键范围判断最佳!(eg:id<=1001000 and id>=1000001)
posted on 2014-07-29 16:52 thanksmoons 阅读(367) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!