mysql limit实例之获取前条记录

时间:2016-08-28
mysql limit语句用于获取select指定条数的记录,如获取前N条记录或获取从m条开始的n条记录,limit经常在网站分页开发中使用到,本文章向大家介绍mysql limit使用实例和分析,需要的朋友可以参考一下。

limit实例

SELECT * FROM employee LIMIT 5;

查询employee表的前5条记录。

SELECT * FROM employee LIMIT 5, 5;

查询employee表中从第六条开始的5条记录,即查询第6条到第11条的数据。

limit与order by使用实例

SELECT * FROM employee ORDER BY RAND() LIMIT 5;

随机获取employee表中5条记录

SELECT id, first_name FROM employee ORDER BY salary DESC LIMIT 1;

获取employee表中工资最高的员工ID和员工名称。

如何优化limit

先看表ibmng(id,title,info),这张表中ID是主键,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
/*  http://www.manongjc.com/article/1411.html */

大家一定会看到问题, 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)