Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / При каких условиях пересчитывается индекс / 5 сообщений из 5, страница 1 из 1
22.10.2015, 01:16:34
    #39082965
Dmitriy-CoDy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При каких условиях пересчитывается индекс
Хи форумчане.

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

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


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

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

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

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

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


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