Строки без связей с другой табл. и время выполнения

alpes

Весь мир на ладони
Строки без связей с другой табл. и время выполнения

Такой пример:
Есть две таблицы table1 -|--< table2 связанные полями table1.id=table2.Linkid1. Нужно найти в table1 такие строки для которых в table2 не будет ни одной записи поля State равного 'play'. Такие строки нахожу запросом:
select table1.id from table1 LEFT JOIN table2 ON table1.id=table2.Linkid1 AND table2.State='play' where table2.Linkid1 is NULL
Но вот в чем проблема: такой запрос НУ О--ЧЕ-НЬ долго выполняется при больших таблицах (таб1~3 тыс., таб2~10 тыс. записей), что не скажешь про простые запросы SELECT .. FROM .. WHERE.
Подскажите как можно обойти эту проблему?!
 

alpes

Весь мир на ладони
Спасибо! Попробую, бо чет думал что индексировать надо только строковые поля.
 

chira

Новичок
попробуй сделать составной индекс для table2
alter table table2 add index id_state (Linkid1,state)
 

Vinny

Guest
Индекстировать нужно все поля по которым осуществляется поиск. Но это только в том случае, если операций select выполняется больше чем insert. Потому как каждый новый индекс замедляет insert...
 

alpes

Весь мир на ладони
Всем СПАСИБО! Изменение налицо! Пробывал варианты: с составным индексом, одним и двумя одинарными. По времени работает примерно одинаково и шустро. Поле State имеет тип enum с всего семью значениями. При составном индексе количество индексов совпадает с количеством записей, если проиндексировать только Linkid1, то индексов будет немного меньше половины общего числа записей.
Подскажите как правильно проиндексировать в таком случае?
 

Yurik

/dev/null
это и есть правильно, индекс содержит указатели на записи в базе для каждого уникального поля, т.е. если поле имеет N distinct значений то и индекс будет содержать N элементов
 
Сверху