zoukankan      html  css  js  c++  java
  • 数据库分页

    1、SQL server

    现在常用的是:

    row_number()

    --例如page=1,limit=10
    --     // 开始索引
    --  int start = (page - 1) * limit + 1;//(1)为2是结果为(11)
    --// 结束索引
    --int end = page * limit;//(10)为2是结果为(20)
    select * from(select *, ROW_NUMBER() over (order by p.id desc) row from product p ) c 

    where c.row>=start and c.row<=end

    2、Mysql

    ---语句样式: MySQL中,可用如下方法:

    SELECT * FROM 表名称 WHERE id_pk > (pageNum*10) ORDER BY id_pk ASC LIMIT M
    ---适应场景: 适用于数据量多的情况(元组数上万). 最好ORDER BY后的列对象是主键或唯一所以,

    使得ORDERBY操作能利用索引被消除但结果集是稳定的(稳定的含义,参见方法1)
    ---原因: 索引扫描,速度会很快.

    但MySQL的排序操作,只有ASC没有DESC(DESC是假的,未来会做真正的DESC,期待...).

    方式 1、limit m语句:

    select * from product where id>(1*3) ORDER BY id ASC LIMIT 1
    #通过ID查找 LIMIT M 后面参数是显示条数 

    方式 2、limit m,m语句:

    select * from product order by id desc limit 4,2;
    #问题多 数据多的时候 效率十分低下 满足(4+2)后面的参数是返回条数
    int start=(page-1)*limit;//开始
    List<Product> products = new ArrayList<Product>();
    Product product = null;
    String sql = "select * from product order by pno limit ?,?";
    return getList(sql,new Object[]{start,limit});

     方式 3、 优化方式1

    例如:每页10条数据,当前是第10页,当前条目ID的最大值是109,最小值是100.
    那么跳到第9页:
    select * from dept where deptno<100 order by desc limit 0,10;
    
    那么跳到第8页:
    select * from dept where deptno<100 order by desc limit 10,10;
    
    那么跳到第11页:
    select * from dept where deptno>109 order by asc limit 0,10;
    
    那么跳到第11页:
    select * from dept where deptno>109 order by asc limit 10,10;

    3、sqlite分页方式

     select * from (表名) order by (排序字段) limit (返回条数) offset (第几条开始);

    4、MariaDB

  • 相关阅读:
    Renderscript 浅析 (三)
    renderscript 浅析(二)
    renderscript 浅析(一)
    小米MACE开源框架搭建
    Word2vec
    最优化算法(牛顿、拟牛顿、梯度下降)
    聚类算法一(Kmeans、层次类聚、谱类聚)
    分类算法三(贝叶斯)
    js 创建方法
    XML与JSON的区别
  • 原文地址:https://www.cnblogs.com/dzcici/p/9542513.html
Copyright © 2011-2022 走看看