What I do is add a column to my sheet called ‘Status’. Using a ‘Get rows(s)’ operation, look for the next row that has the status ‘new’ - by default it will return only one row (unless you tell it otherwise in the options). After processing, set the status for the current row to ‘done’.
Now, your workflow will always pick one row to process every time you run it.
PS: Having 50k rows in a Google Sheet is a good indication you should actually be using a real database