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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM