позвольте мне сделать некоторые пояснения, обновление будет использовать индекс в зависимости от распределения данных.
70% Status='A'
20%'B'
10% 'C'
, тогда Status='A'
будет лучше при полном сканировании таблицы, поскольку при этом получается большая часть данных в таблице.если вы хотите получить «C», то индекс лучше, когда вы обращаетесь к конкретным данным.
однако, что касается вашего обновления, и у вас есть индекс, оптимизатор (в большинстве случаев) найдет лучшее выполнениеи план запроса.так почему ты беспокоишься?это занимает больше времени, чем обычно?
Если у вас есть огромные данные, и вы хотите обновить их, первым подходом будет индекс, как вы делаете, если эта таблица сильно пострадала (много dml возражений)и он содержит несколько индексов, тогда требуется статистика обновления, этот запрос даст вам информацию при последнем обновлении статистики (выберите last_analyzed из user_tables, где table_name = 'urtable';)
Alter Index Index_Name Disable
-> этот операторотключит индекс, только если его индекс основан на функции.Вы можете использовать unusable
или лучший подход и рекомендовать сделать его невидимым.
Alter Index Index_Name rebuild
Это как будто вы снова создаете индекс, он освобождает пространство.когда у вас есть много данных, которые вы можете изменить, вы можете рассмотреть это.обратите внимание, что вам нужно столько же места, сколько у индекса.