Ребят, подскажите, пожалуйста, можно ли оптимизировать данный SQL-код, хотя сейчас он показывает неплохую производительность, но такая вложенность удручает.
В документе тот же код, что и на скриншоте.
Таблицы, участвующие в этой оргии:
route - роутинг
route_permission, group_permission, user_group, user_permission - связующие таблицы.
Данный код выбирает пути роутинга, разрешенные для конкретного пользователя(user), в зависимости от принадлежности к группе(group) и наличия соответствующих прав(permission).
iceman12, вложенность кода часто не играет ключевого значения в производительности, однако расскажи о размерах таблицы. Код состоит из множества простых выборок, так что проблемы с производительностью навряд ли будут...
добавлено спустя 15 минут:
iceman12, перестроил немного запрос, но необходимость в этом сомнительная, думаю в конце запроса если число результатов фиксировано неплохо было бы добавить лимит:
SELECT * FROM `route`,(
SELECT `route_id`
FROM `route_permission`
WHERE `permission_id`=(SELECT `permission_id` FROM `group_permission` WHERE `group_id`=(SELECT `group_id` FROM `user_group` WHERE `user_id`=1 LIMIT 1) LIMIT 1)
OR
`permission_id`=(SELECT permission_id FROM user_permission WHERE `user_id` =1 LIMIT 1)
) as route_permission WHERE route.id=route_permission.id