powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UPDATE в большой таблице
8 сообщений из 8, страница 1 из 1
UPDATE в большой таблице
    #39006321
BoDRbIi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, пытаюсь разобраться с обновлением записей в большой таблице, искал по форуму, не смог найти ничего подходящего.
Есть таблица InnoDB, в ней примерно 10 млн. записей.
структура таблицы простая:
id int
name varchar 16
status int 11

Сделал индекс на name,status (normal, btree).
Код: sql
1.
SELECT name, status WHERE name='something' 

выполняется в принципе быстро 4 сек.
А вот
Код: sql
1.
UPDATE tbl SET status=1 WHERE name='something' 


Выполняется крайне долго, изначально 30 сек, когда создал индекс на name, то время сократилось до 14-19 сек, но это всё равно недостаточно быстро, собственно вопрос, можно ли как-то ускорить выполнение UPDATE запроса?
...
Рейтинг: 0 / 0
UPDATE в большой таблице
    #39006331
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сколько всего записей в таблице и сколько подпадает под условие name='something' ?
...
Рейтинг: 0 / 0
UPDATE в большой таблице
    #39006335
BoDRbIi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень интересно получилось:
Код: sql
1.
UPDATE tbl SET status=1 WHERE name=12345 

- выполняется долго.
Код: sql
1.
UPDATE tbl SET status=1 WHERE name='12345' 

- выполняется доли секунды.
...
Рейтинг: 0 / 0
UPDATE в большой таблице
    #39006336
BoDRbIi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в таблице 10 млн записей, под условие попадает ровно 1 строка, name не повторяется
...
Рейтинг: 0 / 0
UPDATE в большой таблице
    #39006369
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoDRbIiОчень интересно получилось:
Код: sql
1.
UPDATE tbl SET status=1 WHERE name=12345 


- выполняется долго.
Код: sql
1.
UPDATE tbl SET status=1 WHERE name='12345' 


- выполняется доли секунды.Потому что надо использовать именно тот тип данных, который нужно, а не полагаться на неявное преобразование типов. Поле name какого типа?
...
Рейтинг: 0 / 0
UPDATE в большой таблице
    #39006373
BoDRbIi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

varchar
...
Рейтинг: 0 / 0
UPDATE в большой таблице
    #39006374
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoDRbIimiksoft,

varcharВот поэтому и сравнивать нужно со строковым литералом, а не с числовым. Т.к. в противном случае вы заставляете MySQL сканировать всю таблицу, преобразовывать поле в число и сравнивать с заданным числом. Конечно, индекс тут не поможет, т.к. нужные значения могут быть разбросаны в произвольных местах индекса.
...
Рейтинг: 0 / 0
UPDATE в большой таблице
    #39006492
BoDRbIi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, Спасибо за объяснение.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UPDATE в большой таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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