powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Медленный запрос. Как ускорить?
21 сообщений из 46, страница 2 из 2
Медленный запрос. Как ускорить?
    #38788291
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МультиТабл апдейт... простейший случай в примере внизу по ссылке.
в двухсловах: формируем SELECT заменяем на UPDATE
добавляем SET FIELD1='НОВОЕ ЗНАЧЕНИЕ'

пример
Код: sql
1.
2.
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788530
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Флуд и оффтоп зачищен.
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788558
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то я косячу…
Код: sql
1.
2.
3.
4.
5.
6.
7.
update `k-ts`, `k-t_s` set `k-ts`.`kol` =
(
SELECT count(*)
FROM `k-t_s`
group by `k-t_s`.`id_s`
)
where `k-t_s`.`id_s` = `k-ts`.`ids`


Пишет: #1242 - Subquery returns more than 1 row

Отдельно
Код: sql
1.
2.
3.
SELECT count(*)
FROM `k-t_s`
group by `k-t_s`.`id_s`


выполняется, а в целом запросе нет.
что не так?
Вот таблицы:

CREATE TABLE IF NOT EXISTS `k-ts` (
`ids` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`s` varchar(60) NOT NULL,
`kol` mediumint(8) unsigned NOT NULL COMMENT 'Количество',
`f` tinyint(3) unsigned NOT NULL COMMENT 'Состояние',
PRIMARY KEY (`ids`),
UNIQUE KEY `s` (`s`),
KEY `f` (`f`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Слова на кириллице' AUTO_INCREMENT=5072371 ;

CREATE TABLE IF NOT EXISTS `k-t_s` (
`id_sv` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`id_n` int(10) unsigned zerofill NOT NULL,
`id_s` int(10) unsigned zerofill NOT NULL,
PRIMARY KEY (`id_sv`),
KEY `id_s` (`id_s`),
KEY `id_n` (`id_n`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Связи для кириллицы' AUTO_INCREMENT=5066222 ;
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788572
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkОтдельно
Код: sql
1.
2.
3.
SELECT count(*)
FROM `k-t_s`
group by `k-t_s`.`id_s`



выполняется, а в целом запросе нет.
что не так? английским по белому написано -
andrejkSubquery returns more than 1 row
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788597
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал так:
Код: sql
1.
2.
3.
4.
5.
6.
update `k-ts`, `k-t_s` set `k-ts`.`kol` =
(
SELECT count(`k-t_s`.`id_s`)
FROM `k-t_s`
where `k-t_s`.`id_s` = `k-ts`.`ids`
)


PHPmyAdmin уже минут 10-15 думает…
Это нормально?
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788602
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то типа:

Код: sql
1.
2.
3.
4.
5.
6.
update `k-ts`
set `k-ts`.`kol` =
(
SELECT count(*)
FROM `k-t_s`
where `k-t_s`.`id_s` = `k-ts`.`ids`)
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788603
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkСделал так:
Код: sql
1.
2.
3.
4.
5.
6.
update `k-ts`, `k-t_s` set `k-ts`.`kol` =
(
SELECT count(`k-t_s`.`id_s`)
FROM `k-t_s`
where `k-t_s`.`id_s` = `k-ts`.`ids`
)


PHPmyAdmin уже минут 10-15 думает…
Это нормально?

нет, не нормально, у вас ошибка в СКЛ,
посмотрите мой вариант.
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788611
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbcчто-то типа:

Код: sql
1.
2.
3.
4.
5.
6.
update `k-ts`
set `k-ts`.`kol` =
(
SELECT count(*)
FROM `k-t_s`
where `k-t_s`.`id_s` = `k-ts`.`ids`)


Попробовал ваш запрос, вот что выдало через несколько минут:
Lock wait timeout exceeded; try restarting transaction
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788636
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkjavajdbcчто-то типа:

Код: sql
1.
2.
3.
4.
5.
6.
update `k-ts`
set `k-ts`.`kol` =
(
SELECT count(*)
FROM `k-t_s`
where `k-t_s`.`id_s` = `k-ts`.`ids`)


Попробовал ваш запрос, вот что выдало через несколько минут:
Lock wait timeout exceeded; try restarting transaction


ок, тогда сделайте уж совсем прямолинейно:

(кстату, у вас есть индекс на таблице k-t_s на поле `id_s` ?
если не ОБЯЗАТЕЛЬНО сделайте)

сначала:

create table temp_01
select
id_s, count(1) kol
from k-t_s;

потом

CREATE INDEX idx_temp_01_ids ON temp_01 (id_s);

потом,

update `k-ts` ts
set ts.`kol` =
(select t1.kol from temp_01 t1 where t1.id_s = ts.id_s)
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788639
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, ну вечно я тороплюсь, вот так надо

create table temp_01
select
id_s, count(1) kol
from k-t_s
GROUP BY id_s;
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788648
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbcок, тогда сделайте уж совсем прямолинейно:

(кстату, у вас есть индекс на таблице k-t_s на поле `id_s` ?
если не ОБЯЗАТЕЛЬНО сделайте)

Я так понял, первичный ключ, которым это поле является не в счёт. Сделать ещё индекс
Код: sql
1.
CREATE INDEX id_s ON k-t_s(id_s);


?
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788650
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkjavajdbcок, тогда сделайте уж совсем прямолинейно:

(кстату, у вас есть индекс на таблице k-t_s на поле `id_s` ?
если не ОБЯЗАТЕЛЬНО сделайте)

Я так понял, первичный ключ, которым это поле является не в счёт. Сделать ещё индекс
Код: sql
1.
CREATE INDEX id_s ON k-t_s(id_s);


?

если ид_с НЕ первый в наборном ключе, то надо сделать
отдельный индекс.
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788652
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc
если ид_с НЕ первый в наборном ключе, то надо сделать
отдельный индекс.
упс, я подвис в терминологии…
Что значит «НЕ первый в наборном ключе» и «отдельный индекс»?
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788695
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkjavajdbcесли ид_с НЕ первый в наборном ключе, то надо сделать
отдельный индекс.
упс, я подвис в терминологии…
Что значит «НЕ первый в наборном ключе» и «отдельный индекс»?


если надо связку по полю А, то наборный индекс (А, Б)
вполне подойдет, а наборный индекс (Б,А)
не поможет -- А не на первом месте.
И надо создать отдельный индекс по (А).

Вообше все такие вопросы надо смотреть через ЕКСПЛЕЙН,
там будет видно какие индексы есть и какие
сработали , или не сработали.
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788730
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Это вы, наверное, про СОСТАВНОЙ индекс имели ввиду? А то я термин «наборный» впервые слышу)
Ну а по затыку, который с вашим вариантом запроса вышел:

Lock wait timeout exceeded; try restarting transaction

это на стороне хостера ограничения какие-то?
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38788739
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkСпасибо. Это вы, наверное, про СОСТАВНОЙ индекс имели ввиду? А то я термин «наборный» впервые слышу)
Ну а по затыку, который с вашим вариантом запроса вышел:

Lock wait timeout exceeded; try restarting transaction

это на стороне хостера ограничения какие-то?


да, составной == наборный.


Я так думаю что апдейт хотел залочить таблицу
а ему кто-то дал это сдеалть.... можно просто повторить
снова и снова. Индекс на к-т-с ид-с надо полюбому.


То что я предложил с временой таблицей -- вопшемто
тоже самое, просто разбито на отдельны шаги --
при этом локов может быть меньше и больше
шансов на успех при громадных данных.
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38789268
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С ума сойти. Попробовал ещё раз вот это:
Код: sql
1.
2.
3.
4.
5.
6.
update `k-ts`
set `k-ts`.`kol` =
(
SELECT count(*)
FROM `k-t_s`
where `k-t_s`.`id_s` = `k-ts`.`ids`)


Всё за доли секунды прошло.
вчера звонил хостеру, выяснилось, что у меня там 6 часов какой-то запрос висел. Наверное он и не давал обновить таблицу.
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38789895
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkС ума сойти. Попробовал ещё раз вот это:
Код: sql
1.
2.
3.
4.
5.
6.
update `k-ts`
set `k-ts`.`kol` =
(
SELECT count(*)
FROM `k-t_s`
where `k-t_s`.`id_s` = `k-ts`.`ids`)


Всё за доли секунды прошло.
вчера звонил хостеру, выяснилось, что у меня там 6 часов какой-то запрос висел. Наверное он и не давал обновить таблицу.

ок, хорошо.

На всякий такой будуший случай посмотрите команду:

SHOW PROCESSLIST:

и

KILL <process_id>;

Этими командами вы сами сможете выловить
зависшие квери и убить по номеру процесса (если то надо).
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38790024
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо.
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38790204
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkСделал так:
Код: sql
1.
2.
3.
4.
5.
6.
update `k-ts`, `k-t_s` set `k-ts`.`kol` =
(
SELECT count(`k-t_s`.`id_s`)
FROM `k-t_s`
where `k-t_s`.`id_s` = `k-ts`.`ids`
)


PHPmyAdmin уже минут 10-15 думает…
Это нормально?

\да
...
Рейтинг: 0 / 0
Медленный запрос. Как ускорить?
    #38790213
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivandrejkСделал так:
Код: sql
1.
2.
3.
4.
5.
6.
update `k-ts`, `k-t_s` set `k-ts`.`kol` =
(
SELECT count(`k-t_s`.`id_s`)
FROM `k-t_s`
where `k-t_s`.`id_s` = `k-ts`.`ids`
)


PHPmyAdmin уже минут 10-15 думает…
Это нормально?

\да


Сори, должно быть
Код: sql
1.
2.
3.
4.
5.
6.
update `k-ts` set `k-ts`.`kol` =
(
SELECT count(`k-t_s`.`id_s`)
FROM `k-t_s`
where `k-t_s`.`id_s` = `k-ts`.`ids`
)
...
Рейтинг: 0 / 0
21 сообщений из 46, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Медленный запрос. Как ускорить?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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