• sql limit order by and where


    1 sql limit

    limit size,返回前size行。

    limit offset , size,返回offset开始的size行,offset从0行开始。

    2 sql limit with where

    where先对基础数据按行进行过滤,然后limit操作在这个经过过滤的数据基础至上。

    3 sql limit with order by

    对基础数据进行排序,然后再进行limit操作,这样保证返回的结果的顺序确定。

    用了order by返回的结果也不是确定的,如果是基于非唯一字段排序的,那么返回的结果也可能不一样,要确定一样,那么就要基于唯一性字段排序。

    用了limit的order by不会全表排序的,它会全表扫描,然后找到前n大的后就直接返回了,如果是索引列的话,因为已经排好序了,就会非常快了。

    如果非唯一字段排序,但是要求结果一致的话,可以采用下面的办法:

    可以额外加一个排序条件。例如id字段是唯一的,可以考虑在排序字段中额外加个id排序去确保顺序稳定。

    所以上面的情况下可以在SQL再添加个排序字段,比如fund_flow的id字段,这样分页的问题就解决了。修改后的SQL可以像下面这样:
    SELECT * FROM user ORDER BY create_time,id LIMIT 6,2;

    4 sql limit without order by

    返回的结果的顺序不是固定的,但是结果是一致的,只要原始数据不变化。

    5 大表时提高limit的效率

    select * from product limit 866613, 20   37.44秒

    limit语句的查询时间与起始记录的位置成正比,因为需要从头开始遍历整个表来找到866613的位置。

    解决办法:

    使用索引,帮助sql引擎找到866613的位置。使用覆盖索引,即只包含索引的列。

    select id from product limit 866613, 20 0.2秒

    SELECT * FROM product WHERE ID > =(select id from product limit 866613, 1) limit 20

    或者使用join

    SELECT * FROM product a JOIN (select id from product limit 866613, 20) b ON a.id = b.id

  • 相关阅读:
    项目实战【vue,react,微信小程序】(1708E)
    java——集合——List集合——List集合
    java——集合——List集合——LinkedList集合
    Java——集合——泛型——泛型通配符
    Java——集合——泛型——定义和使用含有泛型的接口
    java——集合——List集合——ArrayList集合
    工作效率
    js中__proto__和prototype的区别和关系?
    KubeEdge架构问题汇总
    整数分解
  • 原文地址:https://www.cnblogs.com/hustdc/p/11492041.html
Copyright © 2020-2023  润新知