Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запрос занимает слишком много времени.
 
 автор: man1   (18.04.2012 в 23:15)   письмо автору
 
 

Привет всем.

Есть БД. При ее обновлении запросом все затягивается аж на 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

  Ответить  
 
 автор: cheops   (19.04.2012 в 10:10)   письмо автору
 
   для: man1   (18.04.2012 в 23:15)
 

Попробуйте для начала отказаться от двухтабличного запроса, получив всю необходимую информацию для однотабличного UPDATE-запроса при помощи SELECT-запроса.

  Ответить  
 
 автор: man1   (19.04.2012 в 23:40)   письмо автору
 
   для: 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

???

  Ответить  
 
 автор: cheops   (20.04.2012 в 10:40)   письмо автору
 
   для: man1   (19.04.2012 в 23:40)
 

А у вас данные одной таблицы, перебрасываются в другую... тогда да, пожалуй никак не выйдет. А сколько примерно операций обновления осуществляется во время этого запроса?

  Ответить  
 
 автор: Valick   (20.04.2012 в 10:58)   письмо автору
 
   для: man1   (19.04.2012 в 23:40)
 

вы лучше опишите логику своего скрипта, обычно такого рода операции разовые, при изменении структуры БД и таблиц, где время запроса не играет роли
если у вас каждый раз туда-сюда летит такой объем данных, то что-то не так с логикой

  Ответить  
 
 автор: man1   (20.04.2012 в 15:06)   письмо автору
 
   для: 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:07)   письмо автору
 
   для: man1   (20.04.2012 в 15:06)
 

cheops,
Скрипт, по идее, должен работать каждые минут 10-15 хотя бы (потому как скрипт, который парсит все содержимое в базу, работает каждые 7-10 минут), но он здорово вешает сайт, т.к. локается БД при апдейте.

  Ответить  
 
 автор: Valick   (20.04.2012 в 15:56)   письмо автору
 
   для: man1   (20.04.2012 в 15:06)
 

в таблице social.id_login проставляется значение logins.id_login
это можно проставлять при входе пользователя в аккаунт, зачем это вешать на крон?
хотя достаточно странная система...

[поправлено модератором]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования