zoukankan      html  css  js  c++  java
  • mysql中limit用法误区

    之前一直用oracle,在分页的时候用rownumber,转换到mysql上之后,用limit做分页;

    在做某个业务的时候,需要先将数据排序,再分页,在给limit上参数的时候沿用了oracle的rownumber方式传参,最终导致了分页查到的数据越来越多,导致响应越来越慢,最终找到了问题所在;

    错误代码:

    1 SELECT * FROM td_corporation_user t WHERE (t.`corp_logo` IS NOT NULL AND t.`corp_logo` <> '') AND t.`corp_user_type` = '7' ORDER BY t.`corp_member_number` asc limit 0,15;
    2 
    3  
    4 
    5 SELECT * FROM td_corporation_user t WHERE (t.`corp_logo` IS NOT NULL AND t.`corp_logo` <> '') AND t.`corp_user_type` = '7' ORDER BY t.`corp_member_number` asc limit 15,31;

    上面的代码1是第一次请求的sql,代码2是第二次请求的sql,可以看出limit的第二个参数在递增,这个问题最终导致了第二次请求的时候返回的是排序数据中15~46条数据,一共31条数据,以此类推,以后的会更大;

    启示limit的第二个参数并不是像rownumber中行号的结束,而是取多少条数据,所以limit的第二个参数是不需要变的,只需要变第一个行号的起始即可

    正确代码:

    1 SELECT * FROM td_corporation_user t WHERE (t.`corp_logo` IS NOT NULL AND t.`corp_logo` <> '') AND t.`corp_user_type` = '7' ORDER BY t.`corp_member_number` asc limit 0,15;
    2 
    3  
    4 
    5 SELECT * FROM td_corporation_user t WHERE (t.`corp_logo` IS NOT NULL AND t.`corp_logo` <> '') AND t.`corp_user_type` = '7' ORDER BY t.`corp_member_number` asc limit 15,15;
  • 相关阅读:
    读写分离
    java并发集合知识点(二)
    jdbc框架有很多,包括spring jdbc
    多线程,势必涉及到共享对象读写问题
    &lt;xliff:g&gt;标签
    租赁市场的上海方(浦东/张江)
    HDU 3488Tour(流的最小费用网络流)
    sql使用存储过程和交易
    状态压缩动态规划 -- 骨牌
    Android-2手机应用程序,短信应用
  • 原文地址:https://www.cnblogs.com/qingtingzhe/p/5262115.html
Copyright © 2011-2022 走看看