Я в значительной степени согласен с ответом Адама.Но я бы хотел провести серьезное тестирование по сравнению с альтернативой.
Проблема, которую я вижу, заключается в том, что вам нужно не только выбирать строки, но и обновлять эти строки.Хотя это должно быть довольно быстро, я бы хотел избежать обновления.И избегайте больших транзакций (см. Ниже).
В качестве альтернативы можно добавить системную дату по умолчанию CREATE_DATE.Индекс это.А затем выберите записи, где create_date> = (дата / время начала вашего предыдущего выбора).
Но у меня недостаточно данных об относительной стоимости установки системной даты в качестве значения по умолчанию и установки значения Y, обновления функции на основе индекса даты и выбора диапазона для даты противконкретный выбор по одному значению для Y. Вы, вероятно, захотите сохранить статистику или намекнуть запрос, чтобы использовать индекс для столбца Y / N, и определенно захотите использовать подсказку для столбца даты - статистикана столбце даты почти наверняка будет старый.
Если данные также постоянно добавляются в таблицу, в том числе в течение периода выполнения запроса, необходимо следить за контролем транзакций.В конце концов, вы не хотите читать 100 000 записей с флагом = Y, а затем обновлять 120 000, в том числе 20 000, поступивших при выполнении запроса.
В случае флага есть два простых способа: SET TRANSACTION перед вашим выбором и фиксацией после вашего обновления, или начните с обновления от Y до Q, затем сделайте свой выбор для тех, которые являются Q, изатем обновите до N. Согласованность чтения Oracle - это замечательно, но с ней нужно обращаться осторожно.
Для версии столбца даты, если вы не возражаете против риска обработки нескольких строк более одного раза, просто обновитетаблица с последней обработанной датой / временем непосредственно перед вашим выбором.
Если в таблице не так много информации, рассмотрите возможность ее организации в индекс.