隨筆-1  評論-68  文章-98  trackbacks-0
          翻頁在各個數據庫中一般都有各自的特性參數完成,oracle用range(rownum+alias),mssql用top,而mysql使用了limit。

          limit參數在數據小時效率非常高,隨著數據量的增大,速度呈線性下降,這時候就可以顯示出range的優勢了。

          比如有張表有35w條數據,不算大,一次query需要不少的內存,如果要分批/翻頁查詢的話,如select * from car order by id limit offset, nums+offset,第一次查詢10w條,則第二次只可以查詢5w條,第三次3w條,……而且到了后面數據還會出現重復現象。

          select * from car order by id limit 0, 100000;
          select * from car order by id limit 100001, 150000;
          select * from car order by id limit 150001, 180000;
          ……

          集合limit和range可以很好的解決這個問題:

          select * from car order by id asc limit 0, 100000;
          # query {max id} from this list
          ……
          select * from car order by id desc limit 0, 100000;
          # query {min id} from this list
          ……
          select * from car where id > {max id} and id < {min id} order by id;

          總共耗時20s左右!
          posted on 2007-09-01 02:14 Xu Jianxiang 閱讀(4274) 評論(1)  編輯  收藏 所屬分類: Other Tech

          評論:
          # re: MySQL的limit參數 2008-11-13 11:51 | 網友
          select * from car order by id limit 0, 100000;
          select * from car order by id limit 100001, 150000;
          select * from car order by id limit 150001, 180000;
          你確定分別返回10W,5W,3W而不是10W,15W,18W ?  回復  更多評論
            
          主站蜘蛛池模板: 浦城县| 梅州市| 凤城市| 蒙山县| 临夏县| 扎囊县| 万州区| 富裕县| 营山县| 蒙山县| 施秉县| 曲阳县| 佛冈县| 临洮县| 苍南县| 黎川县| 五华县| 湖南省| 英山县| 百色市| 麻江县| 郯城县| 固始县| 绥芬河市| 樟树市| 保德县| 镇坪县| 江油市| 穆棱市| 屏边| 德昌县| 磐安县| 镇巴县| 滁州市| 盐池县| 介休市| 宜昌市| 鹤庆县| 徐州市| 崇仁县| 灵川县|