在mysql中limit可以實現快速分頁,但是如果數據到了幾百萬時我們的limit必須優化纔能有效的合理的實現分頁了,可能會卡死你的服務器
如圖,一張有不到一萬條的數據查十條
掃描10行,耗時0.006s秒
但是當我記錄了上次的最大ID
掃描10行。
耗時0.002s,時間提升,雖然數據量不大,但也能看出來變化
總結
當一個數據庫表過於龐大,LIMIT offset, length中的offset值過大,則SQL查詢語句會非常緩慢,你需增加order by,並且order by字段需要建立索引。
如果使用子查詢去優化LIMIT的話,則子查詢必須是連續的,某種意義來講,子查詢不應該有where條件,where會過濾數據,使數據失去連續性。
如果你查詢的記錄比較大,並且數據傳輸量比較大,比如包含了text類型的field,則可以通過建立子查詢。
SELECT id,title,content FROM items WHERE id IN (SELECT id FROM items ORDER BY id limit 900000, 10);
如果limit語句的offset較大,你可以通過傳遞pk鍵值來減小offset = 0,這個主鍵最好是int類型並且auto_increment
SELECT * FROM users WHERE uid > 456891 ORDER BY uid LIMIT 0, 10;