在编写mysql分页查询时需要考虑效率问题,在网上查了几篇文章简单学习了一下
①http://www.manongjc.com/article/1087.html
②http://www.jb51.net/article/46015.htm
mysql分页语句是select id from table limit x, y影响效率的主要是x的大小。
在第二篇文章采取记录当前页id的max与min来实现具体如下:
select idfrom table where id > max limit m,n
这样写因为对比的是当前页而非第一页所以m的值小于x值,效率会有所提升。
这样做可行的前提是id不能是重复的,如果想要查找物品质量的一个范围该如何去做呢?我的思路如下
表:goods_test:id,weight,datetime
id为主键在之后不会使用,weight是质量,datetime是物品登入数据库的毫秒级的时间
假设有物品质量分别为:1,1,1,3,3,3,3,4,4,5,5,6
假设第一页是:前4个(1,1,1,3),顺序为质量升序时间降序,其中max为3,min为1。
如果用第二篇文章中的方法显示下一页就会出现显而易见的错误,我是利用datetime属性来避免错误的如下:
一、下一页
selectweight from goods_test where weight = max and datetiem > maxdatetime orderby datetime limit 0,4
如果得到的result小于4,再使用
selectweight from goods_test where weight > max order by datetime limit0,(4-result)
!!!:如果是隔页查询就要注意要变limit了,假设跳到第三页,预期为(4,5,5,6),语句如下:
二、第三页
selectweight from goods_test where weight = max and datetiem > maxdatetime orderby datetime limit 4,4
没有任何结果,但是上述语句如果没有limit的话会有3个结果,记录result为3
select weight from goods_test where weight > max order by datetimelimit(4-result),4
我的优化思路就是这样,还没有具体实现仅供参考^_^