Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
30175



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |