Когда создается индекс, или некоторые разделы или подразделы индекса UNUSABLE
, для непригодного объекта сегмент не выделяется. Неиспользуемый индекс или раздел индекса не занимает места в базе данных.
Дополнительную документацию можно найти по ссылке ниже:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/CREATE-INDEX.html#GUID-1F89BBC0-825F-4215-AF71-7588E31D8BFE
Вы можете проверить план query optimizer
или query execution
планируете проверить производительность запроса.
Наличие большого количества индексов в таблице снижает производительность DML, поскольку база данных также должна обновлять индексы. Индексы могут быть использованы (по умолчанию) или непригодны. Неиспользуемый индекс не поддерживается операциями DML и игнорируется оптимизатором. Неиспользуемый индекс может улучшить производительность массовых загрузок.
Я вижу, вы можете попробовать следующие два сценария:
1) Deleting from large table without having index
Drop indexes
- Удаление индексов перед массовым удалением и последующее восстановление их послеможет улучшить производительность удаления, потому что каждое отдельное удаление должно будет удалять себя из индекса, вызывая замедление. Oracle удаляет записи индекса без повторной балансировки дерева индексов («логическое удаление»), но это все еще занимает много времени, особенно если у вас много индексов в целевой таблице
2) Parallel Delete
Вы также можетепроверьте производительность вашего запроса на удаление, используя параллельный dml:
ALTER SESSION ENABLE PARALLEL DML;
DELETE /*+ parallel(table, 20) */
FROM table
Затем вы можете выбрать из двух приведенных выше сценариев, какой из них работает быстрее для вашего запроса на удаление