|
|
|
| Привет всем.
Есть БД. При ее обновлении запросом все затягивается аж на 26 секунд. Сайт начинает виснуть.
Можно ли как-то сделать так, чтобы этого не происходило, а также уменьшить время запроса?
UPDATE social,
logins SET social.id_login = logins.id_login WHERE social.sbotemail = logins.email AND social.id_login =0
|
Лог из phpmyadmin:
Затронуто 105 строк. ( запрос занял 27.3224 сек. )
UPDATE social,
logins SET social.id_login = logins.id_login WHERE social.sbotemail = logins.email AND social.id_login =0
|
UPD:
есть другой, похожий запрос, тоже 25 сек. времени занимает:
Затронуто 0 строк. ( запрос занял 25.4627 сек. )
UPDATE social,
logins SET social.id_login = logins.id_login WHERE social.sbotname = logins.llogin AND social.id_login =0
|
Объем БД:
UPD2:
SELECT COUNT( * )
FROM `social`
3728
|
| |
|
|
|
|
|
|
|
для: man1
(18.04.2012 в 23:15)
| | Попробуйте для начала отказаться от двухтабличного запроса, получив всю необходимую информацию для однотабличного UPDATE-запроса при помощи SELECT-запроса. | |
|
|
|
|
|
|
|
для: cheops
(19.04.2012 в 10:10)
| | Как это сделать? Нельзя же написать нечто вроде этого :
UPDATE social,
logins SET social.id_login = logins.id_login WHERE social.sbotemail = (SELECT id_login FROM logins) AND social.id_login =0
|
??? | |
|
|
|
|
|
|
|
для: man1
(19.04.2012 в 23:40)
| | А у вас данные одной таблицы, перебрасываются в другую... тогда да, пожалуй никак не выйдет. А сколько примерно операций обновления осуществляется во время этого запроса? | |
|
|
|
|
|
|
|
для: man1
(19.04.2012 в 23:40)
| | вы лучше опишите логику своего скрипта, обычно такого рода операции разовые, при изменении структуры БД и таблиц, где время запроса не играет роли
если у вас каждый раз туда-сюда летит такой объем данных, то что-то не так с логикой | |
|
|
|
|
|
|
|
для: Valick
(20.04.2012 в 10:58)
| | Алгоритм работы следующий:
Есть таблицы: social и logins.
1) В таблицу social парсятся данные: stitle,sbotname,semail и прочие.
2) Далее из этой таблицы извлекаются social.sbotemail или social.sbotname и если они совпадают с logins.email или logins.llogin, то в таблице social.id_login проставляется значение logins.id_login.
Поясню для чего это нужно. Скрипт парсит темы с форумов и записывает их в свою БД. Если пользователь рано или поздно зарегистрируется на сайте с такими же данными как находятся в таблице social, то все спарсенные темы автоматически делегируются на его аккаунт. | |
|
|
|
|
|
|
|
для: man1
(20.04.2012 в 15:06)
| | cheops,
Скрипт, по идее, должен работать каждые минут 10-15 хотя бы (потому как скрипт, который парсит все содержимое в базу, работает каждые 7-10 минут), но он здорово вешает сайт, т.к. локается БД при апдейте. | |
|
|
|
|
|
|
|
для: man1
(20.04.2012 в 15:06)
| | в таблице social.id_login проставляется значение logins.id_login
это можно проставлять при входе пользователя в аккаунт, зачем это вешать на крон?
хотя достаточно странная система...
[поправлено модератором] | |
|
|
|