MySQL在大数据Limit使用
2015-12-11 18:53
344 查看
它已被用于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)
看看表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)
相关文章推荐
- 淘宝tairKV分布式
- (unix domain socket)使用udp发送>=128K的消息会报ENOBUFS的错误
- http://www.cnblogs.com/kaituorensheng/p/3814925.html
- Codeforces Round #335 (Div. 2) 606C Sorting Railway Cars(hash)
- [ WARN ] Keyword 'Capture Page Screenshot' could not be runon failure: No browser isopen
- SVM学习笔记(一)
- Communications link failure
- flume-ng负载均衡load-balance、failover集群搭建
- 大数据下mysql配置
- LeetCode 70:Climbing Stairs
- grails防止表单重复提交
- PL/SQL学习网站(日文)http://www.istudy.ne.jp/training/serial/plsql/index.html
- CF 605A(Sorting Railway Cars-贪心)
- Daily Scrum - 12/11
- Failed to create the part's controls
- Contains Duplicate II
- aix 计算性内存和文件内存
- AIX 配置vncserver
- 2014 Multi-University Training Contest 1/HDU4861_Couple doubi(数论/法)
- 老李分享:大数据测试中java和hadoop关系