查询: limit优化


一种情况,limit接受一个参数,即是返回记录的前面最大行数

另一情况,limit接受两个参数,一个是返回记录行的偏移量,一个是返回记录行的最大数量


用法1:

limit rows

 select * from user order by id limit 5;

返回记录的前5行。


用法2:

 limit offset, rows

 select * from user order by id limit 5,10;

偏移量是5行,从第6行开始,返回记录的10行,返回6 - 15行记录。


在实际的开发应用中,分页功能我们可以使用limit来实现数据库的查询,但当分页越往后数,性能会慢慢变差,如:

 limit 10000,20
使用explain分析下SQL查询:

> explain SELECT * FROM user ORDER BY id ASC LIMIT 10000, 20
***************** 1. row **************
id: 1
select_type: SIMPLE
table: user
type: index
possible_keys: NULL
key: PRIMARY
key_len: 4
ref: NULL
rows: 10020
Extra:
1 row in set (0.00 sec)

我们看到,只为查询20行记录,但却查询出10020行记录,先抛掉前面的10000记录,再取出20行记录,这性能太差了。

limit中影响性能的是第一个参数:偏移量,所以我们应该尽可能地使得偏移量变小。

上面的优化,我们可以这样

select * from user where id > 10000 order by id asc limit 20;

这样我们只是查询出20行就可以了。

在查询上一页时,可以这样:

select * from user where id <= 10000 order by id desc limit 20;

不过,在实际中,不仅仅有上一页,下一页,往是这样的:首页,上一页 1 2 3  。。。18 19 20 下一页 尾页



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值