Der Optimize schränkt ja die Daten nicht ein sondern versucht dann eher Batchoptimierung.
Zur Einschränkung kannst du auch

limit 500000

nehmen.
Für ein Paging kann man das dann dynamisieren:

.... limit 500000 offset 0
.... limit 500000 offset 500000

Über Performance rede ich da nun nicht.
Wenn du allerdigns immer den letzten Key merkst, kann man ja mit Where den Start beschleunigen.
Limit entspricht (fast) dem "fetch first n rows".