2010-08-05 3 views

ответ

14

Это фактически тот же самый вид вопроса, как:

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

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

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

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

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

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

+1

Мне нравится аналогия ;-) , –

+0

Чтобы сделать аналогию более педантичной, я бы сказал, что это похоже на получение двух предметов каждого бакалейного магазина; один предмет входит в кладовку в любом старом порядке, дублирующий предмет наносится на кухонную скамью в алфавитном порядке. Если, конечно, вы не используете таблицу с индексированием, и в этом случае вы не беспокоитесь о получении предмета для кладовой :) –

9

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

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

1

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

0

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

+0

Это не отвечает на заданный вопрос. Кроме того, общий совет против использования индекса (особенно без конкретного контекста) является плохим советом. –

Смежные вопросы