Mysql——》limit分页

一、物理分页 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());
        }
    }
}

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章