MySQL大数据量分页查询方法及其优化

MySQL大数据量分页查询方法及其优化,第1张

使用子查询优化大数据量分页查询

这种方式的做法是先定位偏移位置的id,然后再往后查询,适用于id递增的情况。

使用id限定优化大数据量分页查询

使用这种方式需要先假设数据表的id是连续递增的,我们根据查询的页数和查询的记录数可以算出查询的id的范围,可以使用 id between and 来查询:

当然了,也可以使用in的方式来进行查询,这种方式经常用在多表关联的情况下,使用其他表查询的id集合来进行查询:

但是使用这种in查询方式的时候要注意的是,某些MySQL版本并不支持在in子句中使用limit子句。

参考 sql优化之大数据量分页查询(mysql) - yanggb - 博客园 (cnblogs.com)

Mysql的分页关键点在查询时的 limit $iStart,$iEnd//起初值与总长度

举例:selece * from myTable1 order by id desc limit 0,10

从0开始取前10条数据,取第二页的内容时,limit 10,10即可

如有疑问去博客加好友,不清楚的再问我,有时间我再写几篇这样的文章

http://snowcoal.com/1290

在做查询记录集的展现时,分页实现是常做的工作了。不同的数据库,分页的实现也不尽相同,这里我们对比Myslq和Oracle来简要说明一下两种常用数据库中的分页实现

1.MySql中的limit关键字

以模糊查询为例子,limit写到where子句的后面

select * from user where name like '%mm%' limit startrow,readsize

其中值得推敲的是startrow和readsize也就是开始和读取的记录数

这样查询出来的结果集是从startrow行,读取endsize条记录,实际上查询到的结果集是startrow+1到startrow+readsize的结果,这是 *** 作中我们应该注意的,结果集不包括startrow.

2.Oracle中的rownum关键字

select name,email from (select rownum rn ,name ,email from user where rownum <endrow) t where t.rn>=sartrow

这样我们就可以得到startrow到endrow结果集,注意结果集合不包括endrow当前行记录,如果条件子句中不是>=startrow,那么查询到的结果集是也不包括startrow当前行记录。

Oracle中主要用到rownum这个伪字段,子查询得到的记录集包括了一个rownum字段,由于Oracle中rownum字段都是从1开始递增的,查询到几条记录就递增到几,所以我们应从后向前截取要查询的记录,并将rownum固定为结果集合的一个字段,然后再使用外层查询就可以以结果集的rownum固定住的字段来利用where子句来 *** 纵记录了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5897756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存