Оптимизация медленного запроса

SeaGull

Junior Member
Оптимизация медленного запроса

Есть 2 базы:

CARDS - name, grp (около 10000 записей)
PEOPLE - name, hobby (около 5000 записей)

Нужно выбрать из -PEOPLE- все distinct(-Name-) с их -Hobby-, которые соответствуют заданным -Grp- из -CARDS-.

Я пишу:
PHP:
select PEOPLE.name, PEOPLE.hobby
  from PEOPLE, CARDS
  where (PEOPLE.name=CARDS.name) && (CARDS.grp in ("J1", "J3", "J7"))
  group by PEOPLE.name;
Результат приходит верный, но за безумное время (1500 результатов за 5 минут).

Подскажите пожалуйста, как опимизировать запрос ?
 

su1d

Старожил PHPClubа
добавь в начало своего запроса слово EXPLAIN, чтобы было
explain select ....и т.д.
посмотри результат. правильно ли индексы используются? может у тебя их вообще нет?

потом, связывать две таблицы по символьному полю - плохо. Создай идентификатор записи в PEOPLE: ppl_id int unsigned not null auto_increment, и такое же поле без авто_инкремента в КАРДЗ. связывай по ним, т.к. сравнение двух чисел всегда будет быстрее сравнения двух строк из нескольких байт.
 
Сверху