Обновить индексированный столбец Oracle - PullRequest
0 голосов
/ 11 декабря 2018

Предположим, что у нас есть таблица (автомобили) с индексированным столбцом (категория), содержащая такие значения, как 'A', 'B', 'C'.

Если я хочу настроить обновление на этомстолбец, зная, что я использую его в таких условиях, как:

 update cars set category = 'Class A' where category = 'A';

, так что же является лучшим решением?

  • Изменить индекс Index_Name Отключить
  • Обновить DML
  • Изменить индекс Index_Name перестроить

или

  • drop Index Index_Name
  • Обновить DML
  • Создать Index_Name на (автомобили))

1 Ответ

0 голосов
/ 11 декабря 2018

позвольте мне сделать некоторые пояснения, обновление будет использовать индекс в зависимости от распределения данных.

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 Это как будто вы снова создаете индекс, он освобождает пространство.когда у вас есть много данных, которые вы можете изменить, вы можете рассмотреть это.обратите внимание, что вам нужно столько же места, сколько у индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...