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

  • Автор темы Автор темы alpes
  • Дата начала Дата начала

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.
Подскажите как можно обойти эту проблему?!
 
Спасибо! Попробую, бо чет думал что индексировать надо только строковые поля.
 
попробуй сделать составной индекс для table2
alter table table2 add index id_state (Linkid1,state)
 
Индекстировать нужно все поля по которым осуществляется поиск. Но это только в том случае, если операций select выполняется больше чем insert. Потому как каждый новый индекс замедляет insert...
 
Всем СПАСИБО! Изменение налицо! Пробывал варианты: с составным индексом, одним и двумя одинарными. По времени работает примерно одинаково и шустро. Поле State имеет тип enum с всего семью значениями. При составном индексе количество индексов совпадает с количеством записей, если проиндексировать только Linkid1, то индексов будет немного меньше половины общего числа записей.
Подскажите как правильно проиндексировать в таком случае?
 
это и есть правильно, индекс содержит указатели на записи в базе для каждого уникального поля, т.е. если поле имеет N distinct значений то и индекс будет содержать N элементов
 
Сверху