Программирование => Perl => Тема начата: Error202 от 02 Февраля 2006, 12:35:44
Название: Запрос к MySQL - 15 секунд!
Отправлено: Error202 от 02 Февраля 2006, 12:35:44
В одной таблице (b) - 5000 записей В другой (a) - 1500 записей
Почему запрос выполняется 15 секунд?
$sth = $dbh->prepare(qq{ SELECT a.id FROM rw_unrec as a, rw_rec as b WHERE (a.url=b.url) OR (a.email=b.email)}); $sth->execute(); while (($did) = $sth->fetchrow_array()) { $DubID{$did}=\'dub\'; }; $sth->finish();
Название: Запрос к MySQL - 15 секунд!
Отправлено: Меняздесьдавнонет от 02 Февраля 2006, 12:39:24
потому, что 5000х1500=7500000
Название: Запрос к MySQL - 15 секунд!
Отправлено: Error202 от 02 Февраля 2006, 12:41:58
Чего можно с этим сделать?
Просто задача сравнить урл и емаил в 2-х таблицах, и если вдруг они совпадают, вписать id записи табл.А в хэш...
Название: Запрос к MySQL - 15 секунд!
Отправлено: AnnA от 02 Февраля 2006, 12:52:13
на мой взгляд - неоправданная конструкция: ($did) = $sth->fetchrow_array() 1. вас интересует всего одно значение - a.id зачем вам array? 2. вы дублируете данные в памяти. следует использовать функцию с *ref selectrow_hashref например но, возможно и не получится получить заметное преимущество во времени. надо пробовать. ;)
Название: Запрос к MySQL - 15 секунд!
Отправлено: Error202 от 02 Февраля 2006, 12:58:55
В среднем 12-14 секунд.. :(
Название: Запрос к MySQL - 15 секунд!
Отправлено: Error202 от 02 Февраля 2006, 13:29:47
Всем спасибо! Обошелся без этого запроса...
Название: Запрос к MySQL - 15 секунд!
Отправлено: ondr от 02 Февраля 2006, 13:32:53
Error202 читай документацию mysql в разделе "Оптимизация в MySQL" (а лучше и остальные разделы тоже). Расставляй индексы, обрати внимание на типы сверяемых полей, проверяй и корректируй запрос c помощью explain
Название: Запрос к MySQL - 15 секунд!
Отправлено: ondr от 02 Февраля 2006, 13:37:47
Error202 в догонку
from prerldoc DBI: --- When all the data has been fetched from a C