Mysql——》limit分页

105 篇文章 5 订阅

一、物理分页 VS 逻辑分页

物理分页逻辑分页
使用数据库使用:程序代码
访问数据库每次访问数据库只访问一次数据库,把所以数据缓存在内存中
占用内存每次读取部分数据,内存占用相对较少一次性将数据读取到内存,而在相对占用较多
实时实时性强,因为实时访问数据库实时性弱,一次性将数据读取到内存,数据如果发生改变,无法将最新数据应用于操作
适用数据量大,更新频繁数据量小,相对稳定

二、Mysql中的limit

1、语法

limit X,Y:跳过前X条数据,读取Y条数据
X:表示第一个返回记录行的偏移量,如果X=0,即 limit 0, Y,相当于limit Y
Y:表示返回记录行的最大数目

2、查询前N条数据

SELECT * FROM action LIMIT 2;

-- 相当于以下sql
SELECT * FROM action LIMIT 0,2;

在这里插入图片描述

3、跳过前X条数据,查询Y条数据

假设:跳过前2条数据,查询3条数据,也就是X=2,Y=3

SELECT * from action LIMIT 2,3;

在这里插入图片描述

4、分页

假设:每页20条数据

-- 
-- 第1页
SELECT * from action LIMIT 0,20;

-- 第2页
SELECT * from action LIMIT 20,20;

-- 第3页
SELECT * from action LIMIT 40,20;

-- 第4页
SELECT * from action LIMIT 60,20;

-- n页
SELECT * from action LIMIT (n-1)*20,20;

5、性能

待补充O(∩_∩)O~~

三、Java中的limit 和 skip

前提:一次性将数据读取到内存中,用List存储

1、语法

skip(X):表示跳过前X条数据
limit(Y):表示查询Y条数据

2、查询前N条数据

假设:当前有10条数据,查询前5条数据,也就是limit(5)

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Test {

    public static void main(String[] args) {
        testLimit();
    }

    public static void testLimit() {
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        List<Integer>  newList = list.stream().limit(5).collect(Collectors.toList());
        System.out.println(newList.toString());
    }
}

在这里插入图片描述

3、跳过前X条数据,查询Y条数据

假设:当前有10条数据,跳过前5条,查询3条数据,也就是skip(5),limit(3)

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Test {

    public static void main(String[] args) {
        testSkipAndLimit();
    }

    public static void testSkipAndLimit() {
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        List<Integer>  newList = list.stream().skip(5).limit(3).collect(Collectors.toList());
        System.out.println(newList.toString());
    }
}

在这里插入图片描述

4、分页

假设:当前有10条数据,每页3条数据,从第0条数据开始,也就是skip(pageNum*pageSize),limit(pageSize)

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Test {

    public static void main(String[] args) {
        testPage();
    }

    public static void testPage() {
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        int pageSize = 3;
        int pageNumMax = list.size() % pageSize == 0 ? list.size() / pageSize : list.size() / pageSize + 1;

        //从第0页开始,相当于第1页
        for (int i = 0; i < pageNumMax; i++) {
            List<Integer>  newList = list.stream().skip(i*pageSize).limit(pageSize).collect(Collectors.toList());
            System.out.println("从第0页开始:"+newList.toString());
        }
        System.out.println();
        //从第1页开始,更符合人们的思维习惯
        for (int i = 1; i <= pageNumMax; i++) {
            List<Integer>  newList = list.stream().skip((i-1)*pageSize).limit(pageSize).collect(Collectors.toList());
            System.out.println("从第1页开始:"+newList.toString());
        }
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值