同一個寫法在互動式列表沒事,在全量掃描必爆
既有程式碼用了某個寫法而沒出事,不代表那個寫法安全;只代表它承受的負載形狀剛好避開了那個寫法的痛點。
以 OFFSET 分頁的總成本是 O(頁數平方),cursor 分頁才是 O(頁數) 為例:
- 互動式列表:使用者看第 1、2 頁就走了,永遠不會翻到第 1000 頁。OFFSET 在淺頁的成本極低,所以慣例成立。
- 背景全量工作:必然從第 1 頁走到最後一頁,把 OFFSET 最貴的那一段全部走完。同一個寫法在這裡必然爆掉。
可以帶走的判準
抄既有慣例前先問:這支程式的存取形狀,跟慣例當初成立的形狀一樣嗎?
- 誰在跑:使用者互動,還是背景排程?
- 走多遠:只碰前幾頁 / 前幾筆,還是必然走完全部?
- 跑幾次:偶爾一次,還是每筆資料都來一輪?
形狀不同,慣例就不適用——這不是「既有程式碼寫錯了」,是適用範圍的問題。