今天在老王的部落格中看到了一篇《驗證使用子查詢提高mysql分頁效率》的文章,很有收穫,總結分享之~
對於有大資料量的mysql表來說,使用limit分頁存在很嚴重的效能問題。例如老王做的測試,拿乙個接近一千萬行記錄的表,進行查詢從第1000000之後的30條記錄:
sql**1:平均用時6.6秒
select * from `cdb_posts` order by pid limit 1000000 , 30
sql**2:平均用時0.6秒
select * from `cdb_posts` where pid >= (select pid from `cdb_posts` order by pid limit 1000000 , 1) limit 30
因為要取出所有字段內容,第一種需要跨越大量資料塊並取出,而第二種基本通過直接根據索引字段定位後,才取出相應內容,效率自然大大提公升。
可以看出,越往後分頁,limit語句的偏移量就會越大,兩者速度差距也會越明顯。實際應用中,可以利用類似策略模式的方式去處理分頁,比如判斷如果是一百頁以內,就使用最基本的分頁方式,大於一百頁,則使用子查詢的分頁方式。
使用子查詢提高MySQL分頁效率 limit
2 offset大的時候。select from yanxue8 visit limit 10000,10 多次執行,時間保持在0.0187左右 select from yanxue8 visit where vid select vid from yanxue8 visit order by vi...
高效的MySQL分頁 利用子查詢分頁
先抄回來 首先看一下分頁的基本原理 mysql explain select from message order by id desc limit 10000,20g 1.row id 1 select type table message type index possible keys nul...
Mysql採用子查詢優化查詢語句,提高查詢效率
摘要 mysql的優化方式有很多,這裡我先介紹一種,就是在使用連線查詢中的優化。案例 比如我要查詢100萬條資料中id小於100的資料,a表和b表有相同的字段id,那麼id就可以成為連線查詢的條件。如下所示 select from a join b on a.id b.id where id 100...