對於有大數據量的mysql表來講,使用LIMIT分頁存在很嚴重的性能問題。mysql
查詢從第1000000以後的30條記錄:sql
SQL代碼1:平均用時6.6秒 SELECT * FROM `cdb_posts` ORDER BY pid LIMIT 1000000 , 30post
SQL代碼2:平均用時0.6秒 SELECT * FROM `cdb_posts` WHERE pid >= (SELECT pid FROM `cdb_posts` ORDER BY pid LIMIT 1000000 , 1) LIMIT 30性能
由於要取出全部字段內容,第一種須要跨越大量數據塊並取出,而第二種基本經過直接根據索引字段定位後,才取出相應內容,效率天然大大提高。大數據
能夠看出,越日後分頁,LIMIT語句的偏移量就會越大,二者速度差距也會越明顯。索引
實際應用中,能夠利用相似策略模式的方式去處理分頁,好比判斷若是是一百頁之內,就使用最基本的分頁方式,大於一百頁,則使用子查詢的分頁方式。效率