Автор Тема: Запрос к MySQL - 15 секунд!  (Прочитано 4651 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
Запрос к MySQL - 15 секунд!
« : 02 Февраля 2006, 12:35:44 »
В одной таблице (b) - 5000 записей
В другой (a) - 1500 записей

Почему запрос выполняется 15 секунд?


$sth 
$dbh->prepare(qqSELECT a.id FROM rw_unrec as arw_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();
Космическая игрушка

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Запрос к MySQL - 15 секунд!
« Ответ #1 : 02 Февраля 2006, 12:39:24 »
потому, что 5000х1500=7500000

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
Запрос к MySQL - 15 секунд!
« Ответ #2 : 02 Февраля 2006, 12:41:58 »
Чего можно с этим сделать?

Просто задача сравнить урл и емаил в 2-х таблицах, и если вдруг они совпадают, вписать id записи табл.А в хэш...
Космическая игрушка

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Запрос к MySQL - 15 секунд!
« Ответ #3 : 02 Февраля 2006, 12:52:13 »
на мой взгляд - неоправданная конструкция: ($did) = $sth->fetchrow_array()
1. вас интересует всего одно значение - a.id зачем вам array?
2. вы дублируете данные в памяти. следует использовать функцию с *ref
selectrow_hashref например
но, возможно и не получится получить заметное преимущество во времени.
надо пробовать. ;)
пока-пока. :)

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
Запрос к MySQL - 15 секунд!
« Ответ #4 : 02 Февраля 2006, 12:58:55 »
В среднем 12-14 секунд.. :(
Космическая игрушка

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
Запрос к MySQL - 15 секунд!
« Ответ #5 : 02 Февраля 2006, 13:29:47 »
Всем спасибо! Обошелся без этого запроса...
Космическая игрушка

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Запрос к MySQL - 15 секунд!
« Ответ #6 : 02 Февраля 2006, 13:32:53 »
Error202
читай документацию mysql в разделе "Оптимизация в MySQL" (а лучше и остальные разделы тоже). Расставляй индексы, обрати внимание на типы сверяемых полей, проверяй и корректируй запрос c помощью explain
0 OK, 0:1

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Запрос к MySQL - 15 секунд!
« Ответ #7 : 02 Февраля 2006, 13:37:47 »
Error202 в догонку

from prerldoc DBI:
---
When all the data has been fetched from a C