ORACLE Вставить производительность в индексированных таблицах - PullRequest
5 голосов
/ 05 августа 2010

Почему операторы Insert работают медленнее в индексированной таблице?

Ответы [ 4 ]

14 голосов
/ 05 августа 2010

Это на самом деле тот же вопрос, что и:

Почему требуется больше времени, чтобы положить все мои продукты в нужное место на моей кухне? чем оставить все в сумках после того, как я посетил мой продуктовый магазин?

Это потому, что при хранении ваших продуктов вы хотите, чтобы они находились в хорошей, хорошо известной позиции, чтобы потом было легче их найти.

База данных должна делать то же самое.

  • Если у вас есть таблица без индекса, она может просто добавить новые данные в конец таблицы.
  • Если у вас есть индекс, база данных должна выполнять больше работы. Вероятно, он все равно поместит запись в конец таблицы, но дополнительно он обновит свой индекс, чтобы убедиться, что если вы захотите найти эту запись впоследствии, он найдет ее быстрее, чем без индекса.

Это также означает, что добавление большего количества индексов еще больше замедлит вставки.

Должно быть ясно, что вы хотите создать индекс только в том случае, если вы будете использовать его впоследствии. Если вы только создаете индекс и впоследствии не используете его для повышения производительности запроса, вам не нужно иметь индекс, поскольку он только замедлит вставки и не улучшит любой запрос.

9 голосов
/ 05 августа 2010

Оператор INSERT должен одновременно добавлять данные в блоки данных таблицы и обновлять любые индексы, определенные в таблице.

Понятно, что если у вас есть индекс, вставка должна будет выполнить еще некоторую «работу» для обновления индекса.

1 голос
/ 05 августа 2010

Индексы позволяют хранить больше информации (в индексных блоках) о данных, что помогает легче получать данные.Очевидно, что вы сначала выполняете дополнительную работу, чтобы получить выгоду позже (для избранных).

0 голосов
/ 11 сентября 2012

Если вам понадобится удалить некоторые данные на более позднем этапе из таблицы, в которую вы вставили, было бы неплохо иметь индекс в таблице. Дополнительное время, необходимое для вставки данных в таблицу, может быть компенсировано удалением, выполняемым быстрее в индексированной таблице (если индексированные столбцы используются в предложении delete WHERE. ????

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