隨筆-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 ?  回復  更多評論
            
          主站蜘蛛池模板: 奇台县| 南安市| 衡南县| 南部县| 宿松县| 巴塘县| 调兵山市| 鲁甸县| 静宁县| 商都县| 香港 | 南江县| 寿光市| 珠海市| 佛山市| 元阳县| 白水县| 凌云县| 保靖县| 康平县| 德令哈市| 泰来县| 荔波县| 新余市| 乌鲁木齐县| 彩票| 海安县| 墨竹工卡县| 高青县| 柳州市| 牡丹江市| 陆河县| 昌都县| 调兵山市| 阳谷县| 封丘县| 揭西县| 百色市| 祁阳县| 汕尾市| 新泰市|