|
MySQL.RU - Webboard
Вернуться
Нужно оптимизировать запрос со сложным услов. (Михаил) 23/11/2006 - 20:39:14
From: Михаил - 23/11/2006 - 20:39:14
Subject:Нужно оптимизировать запрос со сложным услов.
-----------------
Имеются три таблицы
dept: id,naim - департаменты
otdl: id,id_dept,naim - отделы в них
grup: id,id_otdel,naim - группы в отделах
полный список подразделений получается перемножением:
SELECT * FROM dept,otdl,grup
WHERE dept.id=otdl.id_dept
AND otdl.id=grup.id_otdel
сверху на это наложены условия доступа:
dostup: user,level_podr,id_podr
Например:
'ivan','dept',1 - доступ к департаменту 1 и всем его отделам и группам
'ivan','dept',2 - доступ к департаменту 1 и всем его отделам и группам
'serg','otd',88 - доступ к отделу 88
Для текущего пользователя 'current_user' все доступные департаменты, отделы и группы получаются так:
SELECT * FROM dept,otdl,grup,dostup
WHERE dept.id=otdl.id_dept
AND otdl.id=grup.id_otdel
AND dostup.user='current_user'
AND
(
dostup.id_podr=dept.id AND dostup.level_podr='dept'
OR dostup.id_podr=otdl.id AND dostup.level_podr='otdl'
OR dostup.id_podr=grup.id AND dostup.level_podr='grup'
)
В итоге получается таблица размером dept х otdl х grup х dostup, на которую потом накладывается блок условий. Работает задумчиво, а с некоторого количества записей (особенно в таблице dostup) явно тормозит.
Можно как-нибудь оптимизировать этот запрос?
В принципе, можно разделить таблицу доступа на три, но не уверен, что это поможет принципиально.
Можно придумать какой-нибудь трюк, но в итоге все равно должен получиться один запрос, который выдает набор записей.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
30175
|
|