помогите с запросом

Духовность™

Продвинутый новичок
помогите с запросом

Ситуация такая: есть две таблицы, actions и controllers - они связаны между собой.

Есть таблица связи groups_actions, которая имеет такой вид:

[sql]
CREATE TABLE `group_action` (
`id_group` smallint(5) unsigned NOT NULL,
`id_action` smallint(5) unsigned NOT NULL,
`access` tinyint(1) unsigned NOT NULL,
UNIQUE KEY `ga_unique` (`id_group`,`id_action`)
)
[/sql]

Дело в том, что нужно написать запрос, который получит кроме информации о контроллерах/действиях и значение group_action.access, которое либо будет в результате со значением 1, если группа существует, и со значением 0 если группы нет.

Я написал такой запрос:

[sql]SELECT `action`.*, `action`.`id` as id_action, `controller`.*, IFNULL(`group_action`.`access`, 0) as access FROM `controller` INNER JOIN `action` ON `controller`.`id` = `action`.`id_controller` LEFT JOIN `group_action` ON `group_action`.`id_action` = `action`.`id` AND `group_action`.`id_group` = 0[/sql]

но он мне не нравится. Плохой Explain получается

PHP:
 id     select_type    table  	           type       possible_keys    key              key_len        ref                            rows    Extra
1       SIMPLE          controller         ALL        PRIMARY             NULL           NULL             NULL                        3 	 
1       SIMPLE          action              ALL        NULL                   NULL           NULL             NULL                        6          Using where
1       SIMPLE          group_action   eq_ref   ga_unique          ga_unique  4                   const,cms.action.id   1
хотя необходимые индексы проставлены. Плюс ко всему мне не нравится условие в последнем Joine: [sql]AND group_action.id_group = 0[/sql]

Вот, хочется как-то оптимизировать, но пока я ума не приложу, как это сделать.
 

Gas

может по одной?
Точно есть индекс на `action`.`id_controller`?

мне не нравится условие в последнем Joine
насчёт логики этого условия не скажу, но с точки зрения производительности, всё хорошо.
 

Духовность™

Продвинутый новичок
Точно есть индекс на `action`.`id_controller`?
теперь есть, но особо ничего не изменилось:

PHP:
 id  	 select_type  	 table  	 type  	 possible_keys  	 key  	 key_len  	 ref  	 rows  	 Extra
1 	SIMPLE 	controller 	ALL 	PRIMARY 	NULL 	NULL 	NULL 	3 	 
1 	SIMPLE 	action 	ALL 	id_controller 	NULL 	NULL 	NULL 	5 	Using where
1 	SIMPLE 	group_action 	eq_ref 	ga_unique 	ga_unique 	4 	const,cms.action.id 	1

с точки зрения производительности, всё хорошо.
а чего же тут хорошего? Вон сколько строк база перебирает... 18 штук! 15 уже, если с индексом на `action`.`id_controller`
 

Gas

может по одной?
но особо ничего не изменилось
изменилось, possible_keys=id_controller, а не используется, потому что у тебя слишком мало данных в таблице.

а чего же тут хорошего?
это казалось последнего джойна, которым ты был недоволен, а не всего запроса.
 
Сверху