600 ppr at 800 rpm is 480000 interrupts per second; that may be beyond what your arduino is capabale of doing, at least using the normal Arduino functions like digitalRead(). If 800 works, and you only need to handle 1000 as the max, you might look at using direct digital IO or finding a digitalReadFast() library. Otherwise you might need to throw extra hardware at the problem, and/or consider a different method.

Edit: oops. My calculations were interrupts per minute... I always seem to forget that factor when dealing with RPM, vs everything else that is timed in seconds. (OTOH, there's probably more than one interrupt per encoder "tick"?)

One would hope that had if (s)he wanted position information, it would have been mentioned. My experience suggests that once you're above a couple of revs/sec, position is not the question. Remember that positional accuracy is a fractional thing, a fractional of one revolution. If one is intent on using the wrong tool, at least find a way to filter out the first 599 pulses, after all, for measuring rpm it's only every 600th pulse that matters.

Live as if you were to die tomorrow. Learn as if you were to live forever. - Mahatma Gandhi

Before the pedants jump in with the usual rhetoric, look at a simple bit of math. 1000rpm is 16 - 2/3 revs/sec. At 600ppr, that's 10,000 pulses per second. That's a period (time between pulses) of 100us. The resolution of micros() is 4us. So, if you measure pulse timing at 100us, rpm = 1000. If however, you measure 104us, rpm = 962. At 96us, rpm = 1042. How accurate is that?

The same measurement using a hall effect sensor or some other device intended for measuring revolutions, 1000 rpm has a revolutional period of 60ms, that's 60,000us. If you measure 60,004, rpm = 999.93. In fact to get the same 'lack-of-accuracy' the timing would need to be out by approximately +/- 2,300us.

Live as if you were to die tomorrow. Learn as if you were to live forever. - Mahatma Gandhi