Я думаю, что к анализатору запросов была предложена приблизительная оценка того, сколько строк будет возвращено внутренним запросом, и он был слегка отключен.
Механизм базы данных должен стремиться к трем противоречивым целям:
- транзакция должна быть атомарной, поэтому любые числа, сгенерированные из последовательности в транзакции, должны быть последовательными.
- последовательность не должна быть заблокирована на продолжительное время (в противном случае другие операции INSERT будут заблокированы), и
- внутренний запрос не должен реализовывать полную таблицу результатов, поскольку она может быть довольно большой.
Поскольку никто не гарантировал, что порядковые номера будут последовательными глобально, лучший подход состоит в том, чтобы получить верхнюю границу числа строк, которые должны быть вставлены, затем увеличить последовательность (атомарно) на эту величину и использовать блок, зарезервированный дляОперация INSERT.
Это гарантирует, что одновременный INSERT будет иметь меньшую или большую первичную kзначения ey (т. е. запросы правильно сериализованы), но данные могут быть добавлены между строками (поскольку упорядочение отсутствует, если вы не используете предложение ORDER BY)