@vrazbros

Как влияет индексы на обновление удаление записей?

Ускоряет ли индекс обновление или удаление записей ? Ведь чтобы удалить нужно все равно запись найти)
  • Вопрос задан
  • 833 просмотра
Пригласить эксперта
Ответы на вопрос 2
@lega
1) Индексы ускоряют поиск нужных строк, что добаляет производительности (в т.ч. именения/удаления)
2) Индексы замедляют запрос изменения/удаления, т.к. при изменении нужно обновить (пеерстроить) сами индексы
Ответ написан
Комментировать
@ponaehal
В общем случае нельзя сказать однозначно.... в целом индексы предназначены для ускорения доступа к записям, в т.ч. при удалении и изменении. Но индекс, это отдельная структура на ведение которой СУБД тратит свои ресурсы. Например, при вставке данных в таблицу на которой "висит" 5 индексов, идет еще пять вставок в каждый из этих индексов. Причем вставить новую строку в индекс гораздо сложнее (с точки зрения ресурсов СУБД, возможно в зависимости от используемой СУБД) чем в таблицу, т.к. сначала необходимо найти место куда эту строку вставлять (сейчас говорю о наиболее распространенных b-tree индексах) и ссылки блоках индекса.
Более того, говорить о том, что индекс ВСЕГДА ускоряет доступ к записям - тоже неверно. Все зависит от вашего запроса и способа доступа к данным. Если данных для запроса достаточно в индексе, то СУБД выгребет данные вообще без доступа к таблице. Это во многих случаях (но не всегда :)) будет сильно быстрее чем извлечение данных непосредственно из таблицы. Если в запросе извлекается данных больше чем содержит индекс, то СУБД будет (если ее заставить) сначала обращаться к индексу для того что бы найти адрес строки в таблице, а затем полезет в таблицу и извлечет необходимые данные). Будет ли это быстрее чем просто искать по таблице? - во многом зависит от того сколько % записей должен вернуть запрос. Обычно рекомендация такова: если запрос должен вернуть больше 15-20% строк таблицы, то использование индексов нецелесообразно... Но даже тут есть 100500 тонкостей и особенностей.... В общем в этом вопросе мир тоже не делится на белое и черное... как то так...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы