Поскольку для индексов требуется дополнительное дисковое пространство.Индексы увеличивают объем данных, которые необходимо зарегистрировать и записать в базу данных.Индексы снижают производительность записи.Когда столбец, охватываемый индексом, обновляется, этот индекс также должен быть обновлен.Точно так же любое удаление или вставка требует обновления соответствующих индексов.
Дисковое пространство и штрафы на запись индексов - именно поэтому вам нужно быть осторожным при создании индексов.
Тем не менее, обновления для не-индексированные столбцы могут улучшить свою производительность с помощью индексов.
This:
UPDATE Table SET NonIndexedColumn = 'Value' WHERE IndexedKey = 'KeyValue'
Будет быстрее, чем это:
UPDATE Table SET IndexedColumn = 'Value' WHERE IndexedKey = 'KeyValue'
Но оба приведенных выше, скорее всего, оба будутБыстрее, чем это в любой разумной таблице размеров:
UPDATE Table SET NonIndexedColumn = 'Value' WHERE NonIndexedKey = 'KeyValue'
Удаление, особенно одиночное удаление, также может быть быстрее, даже если таблицу и индексы необходимо обновить.Это просто потому, что механизм запросов может быстрее находить целевые строки.Таким образом, может быть быстрее прочитать индекс, найти строку, удалить строку и обновить индекс, вместо сканирования всей таблицы на предмет правильных строк и удаления соответствующих.Однако даже в этом случае будет больше данных для записи;просто стоимость ввода-вывода для сканирования всей таблицы может быть довольно высокой по сравнению с индексом.
Наконец, теоретически, ключ кластеризации, который распределяет вставки по нескольким страницам диска, может позволить системе поддерживать больше одновременные вставки, поскольку для вставок обычно требуется функционирование блокировок страницы, но это несколько необычная ситуация, которая может привести к ухудшению производительности чтения из-за фрагментации кластеризованных индексов.