傳統的分頁方式,正如 will_paginate plugin 所做的:顯示所有頁數跟連結。有個不 scale 的問題是,它用了 OFFSET 跟 COUNT,當資料量越來越多,分頁的速度就會越來越慢 :(
1: SELECT count(*) FROM messages
2: SELECT * FROM messages ORDER BY id DESC LIMIT 0, 20
不要顯示頁數、不要顯示總數量,可以搭配使用 Ajax 換下一頁。如此就可避免使用到 OFFSET 只用 LIMIT,也減少了一次 COUNT query。
1: page1 = SELECT * FROM messages LIMIT 10 WHERE id > 0 ASC id
2: page2_min_id = page1.last.id
3: page2 = SELECT * FROM messages LIMIT 10 WHERE id > page2_min_id ASC id
原文出處:http://ihower.tw/blog/archives/3457
沒有留言:
張貼留言