来源:自学PHP网 时间:2015-04-16 10:51 作者: 阅读:次
[导读] 对于一直用Oracle的我,今天可是非常诧异,MySQL中同一个函数在不同数量级上的性能居然差距如此之大。先看表ibmng(id,title,info) 唯一 id key 索引title先看看两条语句:select * from ibmng li...
对于一直用Oracle的我,今天可是非常诧异,MySQL中同一个函数在不同数量级上的性能居然差距如此之大。 先看表ibmng(id,title,info) 唯一 id key 索引title 先看看两条语句: select * from ibmng limit 1000000,10 很多人都会认为不会有多大差别,但是他们都错了,差别太大了,(可能机器不同有点差距,但绝对10倍以上)具体执行时间留给好奇的同学。 这是为什么呢,都是offset的错! 优化的话你可以想方法减小offset,如以下: Select * From ibmng Where id >=( 大家一定会看到问题, 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) |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com