1. 程式人生 > >優化limit分頁(延遲關聯)

優化limit分頁(延遲關聯)

limit'分頁有一個問題就是當偏移量較大時查詢遍歷的資料越多,效率會逐漸降低,例如limit 1000,10這樣的查詢這時MYSQL需要查詢出1020條記錄然後只返回最後20條,前面的1000條記錄都會被拋棄,代價較高。如果每個分頁被訪問的資料頻率都相同要優化這種查詢要麼是在頁面中限制分頁的數量要麼是優化大偏移量的效能。

優化此類分頁查詢的最簡單的一個辦法就是儘可能的使用索引覆蓋掃描,而不是查詢所有的列。然後根據需要做一次關聯操作再返回所需的列,對於偏移量很大的時候,這樣做的效率會提升很大。以下面的查詢作為示例,以主鍵info_id(主鍵)作為覆蓋的索引

目前表的資料總量是90122條資料

接下來我們進行幾個分頁資料的測試與對比

一:首先是第五十條資料之後獲取20條

普通用時0.007s


延遲關聯用時0.003s


二:首先是第五十條資料之後獲取5000條

普通用時0.046s


延遲關聯用時0.007s

三:首先是第五十條資料之後獲取50000條

普通用時1.131s

延遲關聯用時:0.043s

還有另外一種方式select info_id,info_oldNO,info_title from  zb_projectinfo where info_id >(select info_id from  zb_projectinfo limit 50000,1 )limit 20這樣的語句和延遲關聯效能差距不大

還有另外一種方式