Одной из возможностей является блокировка. То есть в таблице была строка, которая была зафиксирована и заблокирована другим удалением. Ваше удаление сидел и ждал на замке. Когда транзакция блокировки была зафиксирована, ваше удаление могло быть завершено.
Вторая возможность заключается в том, что вы сначала запустили удаление, которое извлекло блоки с диска в кеш (что заняло время). Когда выбор выполнялся, данные находились в кеше и поэтому работали быстрее. Я думаю, что это менее вероятно, так как вы выбираете статистику, обозначенную «5252 физических чтений», поэтому она не получала их из кеша SGA. Вполне возможно, что кеш диска был задействован.
Третья возможность состоит в том, что есть триггер BEFORE / AFTER DELETE (не FOR EACH ROW), который что-то сделал.
Четвертая возможность состоит в том, что УДАЛЕНИЕ привело к отложенной очистке блока. Когда строки были фактически удалены, если они были записаны на диск до фиксации, у них все еще будет информация о блокировке / транзакции. Приходит ваше удаление, читает блоки, видит устаревшую информацию о транзакции, удаляет ее и перезаписывает блок.
Пятая возможность - это спор. Возможно, одновременно с удалением происходило больше событий.
Много возможностей. Если вы можете воспроизвести его, выполните трассировку с событиями ожидания и запустите ее через TKPROF.