Ahmedovic97 Ответов: 2

Каков эффект индекса на обновления?


У меня есть 1000000 записей, иногда мне нужно обновить свою базу данных, но это занимает больше времени для одного простого обновления(почти 10 секунд).Я хочу знать, выполняет ли индексация моих таблиц мое обновление или есть другое лучшее решение? Я использую c# для своего обновления.

Что я уже пробовал:

Я попробовал классическое обновление с помощью c#

Richard MacCutchan

"Я использую c# для моего обновления."
Было бы лучше использовать SQL. Но чтобы быть серьезным, вам нужно предоставить больше информации о том, что именно вы делаете в своих обновлениях.

Ahmedovic97

я обновляю только одну колонку.В SQL индекс выполняет мое обновление или нет ?

0x01AA

Если у вас есть инструкция update например like UPDATE Tbl1 SET Tbl1.Fld1= 'Updt' WHERE Tbl1.Fld2 = 'xyz' затем индекс на Fld2 это определенно поможет.

Richard MacCutchan

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

Ahmedovic97

например: обновить таблицу X set clumn='R', где Id='9000'
цель моего обновления - пометить запись, если есть ошибка

Richard MacCutchan

Скорее всего, такое обновление потребует сканирования каждой из ваших 1 000 000 записей, чтобы найти каждую запись с этим идентификатором; так что 10 секунд-это неплохо. Я бы посоветовал вам проиндексировать его в поле Id, что может улучшить ситуацию.

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Цитата:
В SQL индекс выполняет мое обновление или нет ?

Этот вопрос вообще не имеет смысла. Индексы не "выполняют никаких обновлений". Во всяком случае, не в том смысле, в каком вы используете эту терминологию.

Если идентификатор является столбцом первичного ключа, то этот столбец уже будет проиндексирован. Нет никакого способа ускорить это до какой-либо значительной степени.

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

Но вы никогда ничего не получаете бесплатно. Когда вы вставляете записи в таблицу, индекс также должен быть обновлен, поэтому при каждой вставке происходит снижение производительности. Если вы случайно обновите значение "id", это также вызовет обновление индекса.

Без индекса ваш оператор должен выполнять то, что называется "сканированием таблицы". Он должен смотреть на каждую строку в таблице, сверяя "9000" со столбцом id в каждой строке, ища совпадения. На миллион записей это займет довольно много времени.


Рейтинг:
0

RickZeeland

Индексы имеют определенную стоимость, так как они тоже нуждаются в обновлении.
Смотрите ответы здесь: Влияние обновления индекса на производительность в SQL Server? - переполнение стека[^]
Поэтому вы должны стараться свести количество индексов к минимуму, особенно когда скорость обновления является вашей главной заботой.