Существует ли оборотная сторона к добавлению многочисленных индексов к таблицам?

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

Если я создам индекс, но закончу тем, что не использовал его, то он вызовет какие-либо проблемы?

24
задан Jason Down 3 February 2010 в 18:34
поделиться

12 ответов

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

27
ответ дан 28 November 2019 в 22:47
поделиться

Да. Вы должны добавлять только те индексы, которые необходимы.

Для индекса требуется дополнительное пространство, и при вставке / обновлении / удалении записей СУБД также необходимо обновить эти индексы. Таким образом, это означает, что для обновления / добавления / удаления записи требуется больше времени, поскольку СУБД требует дополнительного администрирования.

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

Вам следует добавлять только те индексы, для которых вы уверены, что они необходимы. Чтобы определить столбцы, в которые вы можете поместить индексы, вы можете:

  • добавить индексы к столбцам, которые { {1}} внешние ключи
  • добавляют индексы к столбцам, которые часто используются в предложениях where
  • добавляют индексы к столбцам, которые используются в положениях order by.

Другой - и, возможно, лучший - подход - использовать SQL Profiler:

  • использовать SQL Profiler для отслеживания вашего приложения / базы данных на некоторое время
  • сохранить результаты трассировки
  • использовать трассировку приводит к появлению мастера настройки индекса, который сообщит вам, какие индексы следует создать, какие столбцы должны быть в каждом индексе, а также сообщит вам порядок этих столбцов для индекса.
5
ответ дан 28 November 2019 в 22:47
поделиться

Не создавайте никаких дополнительных индексов вначале. Подождите, пока вы хотя бы частично разработаете систему, чтобы иметь представление об использовании таблицы. Создайте планы запросов, чтобы увидеть, что запрашивается (и как, и затраты на производительность), и ЗАТЕМ добавляйте новые индексы по мере необходимости.

1
ответ дан 28 November 2019 в 22:47
поделиться

Индексы приводят к увеличению размера базы данных и увеличению времени для вставки / обновления / удаления записей. Старайтесь не добавлять их, если не знаете, что будете их использовать.

4
ответ дан 28 November 2019 в 22:47
поделиться

Наличие индекса означает, что операции INSERT и UPDATE занимают немного больше времени. Если у вас слишком много индексов, то преимущество более быстрого времени поиска может не стоить дополнительного времени INSERT и UPDATE.

1
ответ дан 28 November 2019 в 22:47
поделиться
  • обновление и вставка обходятся дороже, так как индексы также нуждаются в обновлении
  • используется больше места
1
ответ дан 28 November 2019 в 22:47
поделиться

Не индексируйте вслепую! Взгляните на свои данные, чтобы увидеть, какие столбцы фактически используются в предикатах SELECT, и проиндексируйте их.

Также учтите, что индексы занимают место. Иногда много места. Я видел базы данных, в которых данные индексации намного превосходили необработанные данные в чистом объеме.

1
ответ дан 28 November 2019 в 22:47
поделиться

Посмотрите на столбцы, используемые в ваших предложениях where, посмотрите на столбцы, используемые в соединениях, если таковые имеются. Как правило, это простейшее практическое правило. Посторонние индексы, как указывалось ранее, замедляют ваши операторы DML и обычно не рекомендуются. В идеале то, что я сделал, - это закончить весь модуль и на этапе модульного тестирования убедиться, что вы можете выполнить анализ нагрузки на модуль, а затем проверить, наблюдаете ли вы замедление, и после анализа того, где именно замедление, добавьте индексы. .

1
ответ дан 28 November 2019 в 22:47
поделиться

Каждый индекс:

  • Занимает какое-то место на диске и в ОЗУ
  • Требуется некоторое время для обновления при каждой вставке / обновлении / удалить строку

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

16
ответ дан 28 November 2019 в 22:47
поделиться

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

Кроме того, вы должны быть уверены в своих индексах и своей конструкции, потому что иногда индексы могут действительно замедлять запросы, если оптимизатор запросов выбирает неправильный индекс. Это необычно, но может произойти, если оптимизируя индекс для конкретного соединения и заставляя другое соединение на самом деле становится медленнее. Я не знаю о SQL Server, но вы найдете много трюков для подсказки mySQL оптимизатора, чтобы построить запросы определенным образом, чтобы обойти это.

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

1
ответ дан 28 November 2019 в 22:47
поделиться

Я думаю, что это было уже ответил, но в основном индексы замедляют вставки / обновления, поскольку индекс обновляется при вставке новой записи (или обновлении существующей).

Пространство также имеет значение, как память, так и диск.

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

Удачи

1
ответ дан 28 November 2019 в 22:47
поделиться

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

1
ответ дан 28 November 2019 в 22:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: