mysql,sqlserver及oracle分页查询

本文探讨了MySQL、SQL Server和Oracle数据库在分页查询时的效率问题及解决方案。MySQL的`LIMIT`在处理大量数据时效率低下,可以通过优化索引来提升。SQL Server使用`TOP`配合`ORDER BY`实现分页,而Oracle则使用`ROWNUM`。文章提出高效分页查询策略,并鼓励读者分享优化心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql数据库:支持分页查询,但对于大数量表进行查询时,效率很低,分页原理如:

limit 10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,问题就在这里,如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。limit n性能是没问题的,因为只扫描n行,所以在mysql中采用分页查询时,我们还得好好想想,留给大家思考,好的想法可以留言交流?

高效分页查询:提示:利用索引,排序进行查询

mysql一次查询page,rows,size,maxpage基本方式:

select *,(select page) as page,(select rows) as rows ,(select COUNT(1) from tablename) as size, 
(select COUNT(1)/2 from tablename) as maxpage from userinfo LIMIT page,rows;


SQLserver本身其实并不支持分页查询,也没有limit,但是有top m,取表中前m条数据。比如:表A有id,a,b,c,d几个字段,

数据库中排序方式可以是:

select top rows * from A where id >(page-1)*rows order by id asc;

sqlserver一次查询page,rows,size,maxpage基本方式:可以仿照mysql查询方式,这里我就不在重复写了。


oracle支持分页查询,方式:skip page limit rows;

高效分页查询:与MySQL有点差异,但是原理是大体相同,模型如下:(rownum是oracle行号)

select t2.* 
from (select rownum r,t1.* from youtable t1 where rownum<?) t2
where t2.r>?,

如需更高效率:请使用order by


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值