powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / При каких условиях пересчитывается индекс
5 сообщений из 5, страница 1 из 1
При каких условиях пересчитывается индекс
    #39082965
Dmitriy-CoDy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хи форумчане.

Подскажите, плиз, кто в курсе.
Ситуация: есть таблица, одно из полей проиндексировано.

Будет-ли пересчитан индекс при выполнении запроса вида
Код: sql
1.
UPDATE `table` SET .... WHERE `primary_key` = '...'


1) поле по которому построен индекс в SET не указано
2) поле по которому построен индекс в SET указано, но новое значение рано старому
...
Рейтинг: 0 / 0
При каких условиях пересчитывается индекс
    #39082971
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy-CoDy,
нет
нет
...
Рейтинг: 0 / 0
При каких условиях пересчитывается индекс
    #39083043
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изменение в индекс вносится только в случае фактического изменения значения поля, входящего в состав индекса. В обоих указанных случаях такого изменения нет.

Хотя чисто теоретически во втором случае существует вероятность изменения. Например, поле имеет тип DOUBLE и содержит некое значение. Причём это значение отличается от того, которое было указано в запросе, за счёт неточного представления десятичных чисел в двоичном виде - т.е. записывали некое 1.1, а хранится какое-то 1.099999999999997 (взято от фонаря, просто для демонстрации сути). И в это поле записывается значение, взятое з другой таблицы, из поля типа FLOAT. В которое записывали точно такое же визуальное значение, но по той же самой причине там хранилось ДРУГОЕ неточное значение, некое 1.10000002 (тоже взято от фонаря). И хотя мы полагаем, что обновление происходит тем же значением, на самом деле значение изменяется - а индекс корректируется.
...
Рейтинг: 0 / 0
При каких условиях пересчитывается индекс
    #39083349
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
retvizanDmitriy-CoDy,
нет
нет

Есть однако нюансы...

1) InnoDb - версионник, и при каждом изменении он создаёт новую версию старой записи. При этом, поскольку первичный ключ
всегда кластерный, то он меняется -- там появляется новая запись с тем же значением первичного ключа, но со следующей версией записи в конце. Также должны промодифицироваться вторичные индексы -- туда должны быть добавлены новые записи со ссылкой
на новую запись в PK ( c новой версией).

2) Если меняется поле не из данного индекса, но из PK, то все индексы также должны быть изменены, чтобы поменять там ссылку на PK со старого значения на новое. (впрочем, это вариация пункта 1).
...
Рейтинг: 0 / 0
При каких условиях пересчитывается индекс
    #39083359
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё есть вероятность, что как в первом, так и во втором случае выполнившийся апдейт обновит 0 записей. Тогда индексы обновлены не будут несмотря на всё вышесказанное.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / При каких условиях пересчитывается индекс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]