Don’t OFFSET Your SQL Query’s Performance (by Taras Drapalyuk in HACKERNOON) • SELECT * FROM tasks ORDER BY id LIMIT 10 OFFSET 10; ◦ Limit (cost=1.34..2.11 rows=10 width=628)… • SELECT * FROM tasks ORDER BY id LIMIT 10 OFFSET 1000000; ◦ Limit (cost=77270.24..77271.02 rows=10 width=628) https://hackernoon.com/dont-offset-your-sql-querys-performance
Don’t OFFSET Your SQL Query’s Performance (by Taras Drapalyuk in HACKERNOON) • SELECT * FROM tasks ORDER BY id LIMIT 10 OFFSET 10; ◦ Limit (cost=1.34..2.11 rows=10 width=628)… • SELECT * FROM tasks ORDER BY id LIMIT 10 OFFSET 1000000; ◦ Limit (cost=77270.24..77271.02 rows=10 width=628) https://hackernoon.com/dont-offset-your-sql-querys-performance 同じ10件でもコストが大きく異なる!!
ORDER BY id DESC LIMIT 20 OFFSET 20; ◦ OFFSET句を利用 ◦ 逐次的なページングの際には ▪ 検索後に累積カウント数を保存して、次の検索時にoffsetとして引き継ぐ • Cursor Pagination ◦ SELECT * FROM users WHERE id > 20 ORDER BY id DESC limit 20; ◦ WHERE句を利用(Cursorは id=20 にあるという感じ) ◦ Cursor対象になる列にはインデックスを張り、順序性を担保することが重要 ◦ 逐次的なページングの際には ▪ 検索後にCursorを保存して、次のページングの際に引き継ぐ