Мне не известен инструмент, который будет делать это автоматически, но есть несколько альтернатив. Разбейте ваш запрос на блоки ...
select blah from table where IdRange between (1 and 100000)
select blah from table where IdRange between (100001 and 200000)
после завершения каждого sql обновите индикатор выполнения.
Или вы можете записать время, затраченное на каждый из ваших выборов, сохранить эти значения, возможно, для каждого пользователя. Затем используйте эту информацию для возврата длины индикатора выполнения.
Оба эти подхода довольно глупы, надеюсь, кто-то знает лучший подход.
Конечно, вы можете попытаться расшифровать план запроса и принять решение на его основе, но в коде это будет сложно.