по поводу правильности расстановки индексов нужно смотреть EXPLAIN
Misha v.3 03.05.2004 20:52
по поводу использования left join: его использовать без необходимости плохо, т.к. он выполняентся значитально медленнее обычного join. если не нужно показывать фильмы. когда ищем по актерам - то надо заменить left join.
подобный like в where - это всегда scan таблицы. индексы использоваться не будут.
от функций в where нужно избавляться. функция будет вычисляться ДЛЯ ВСЕХ строк при выборе. в вашем случае IF(movie_to_genre.genre_id,1,0) = 1 нужно заменить на movie_to_genre.genre_id IS NOT NULL, а в случае, если ^check_right(2)(8) возвращает true вообще убирать из запроса блок после AND. в общем и в перечислении полей IF лучше выкинуть, и проверять парсером не ^if($t.genre_not_define){...}, а ^if(!def $t.genre_not_define){...}
кстати, OR в WHERE это тоже очень плохо, и в подавляющем большинстве случаев индексы не используются.
1) индексы расставлены нормально. но... надо смотреть что по этому поводу думает EXPLAIN.
2) да. см выше. возможно придется делать совсем разные запросы при поиске с актерами и без оных, или делать несколько запросов.
3) дока по mysql. читать много, т.к. это не собрано в одном месте доки, но если разобраться то жить становится легче :)