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