mysql大数据下Limit使用
先看表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)
上一篇: 【MySQL 14】触发器after和before
下一篇: CSS3中transform功能
推荐阅读
-
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
-
linux下使用RPM安装mysql5.7.17
-
【SQL】Oracle和Mysql的分页、重复数据查询(limit、rownum、rowid)
-
MySQL5.7使用pt-table-checksum检查主从数据一致性的测试讲解
-
CentOS 7下使用RPM安装mysql5.7.13
-
使用php批量删除数据库下所有前缀为prefix_的表
-
docker中使用mysql数据库详解(在局域网访问)
-
mysql踩坑之limit与sum函数混合使用问题详解
-
使用dreamhost空间实现MYSQL数据库备份方法
-
通过dbi使用perl连接mysql数据库的方法