Опять у меня проблема со скоростью выполнения запросов

Вначале опишу таблицы:
Отделы (id,название,...)
Услуги (id,id_отдела, наименование,...)
Прайсы (id_услуги, сумма, дата_начала, дата_конца)
Персонал(id,id_отдела,ФИО,...)
Визиты(id,оплата,id_услуги,id_клиента,дата,скидка,возврат_денег,тип_оплаты,выполнение,id_выполнившего,...)
И есть представление - ВИЗИТ_ВСЁ, которое из вышеописанных таблиц уже собирает таблицу вида:
ID_визита,ID_отдела,Наименование_Отдела,ID_услуги,Наименование_услуги,ID_выполнившего_заказ,ФИО_выполнившего заказ, Дата_визита,Цена_соответствующая_дате_визита,скидка,тип_оплаты,возврат_денег,выполнение,оплата,...
Так вот пишу следующий запрос:
Код: Выделить всё
select o.id,min(o.nam_otd) as nam_otd,
count(a.id), //кол-во заказов отдела за указанный период
count(a_1.id), //кол-во оплаченных заказов
count(a_2.id), //кол-во выполненных заказов
count(a_3.id), //кол-во заказов со скидкой
count(a_4.id), //кол-во заказов с возвратом денег (т.е. клиент отказался от заказа - забрал деньги)
sum(a_5.price - a_5.price/100*a_5.skidka), //общая поступившая сумма заказов, учитывая скидки
count(distinct(a_6.kod_pac)), //кол-во клиентов отдела
sum(a_7.price - a_7.price/100*a_7.skidka), //общая поступившая сумма заказов наличными
sum(a_8.price - a_8.price/100*a_8.skidka), //общая поступившая сумма заказов перечислениями
count(distinct(a_9.kod_pac)) //кол-во клиентов оплативших хотя бы один заказ отдела
from ОТДЕЛЫ o left join ВИЗИТ_ВСЁ a
on(a.код_отела = o.id and a.дата>='+d1+' and a.дата<='+d2+')
left join ВИЗИТЫ a_1
on(a.id = a_1.id and a_1.оплата = 1)
left join ВИЗИТ_ВСЁ a_5
on(a_1.id = a_5.id)
left join ВИЗИТ_ВСЁ a_7
on(a_1.id = a_7.id and a_7.оплата = 1 and a_7.тип_оплаты=0)
left join ВИЗИТ_ВСЁ a_8
on(a_1.id = a_8.id and a_8.оплата = 1 and a_8.тип_оплаты=1)
left join ВИЗИТЫ a_2
on(a_1.id = a_2.id and a_2.выполнение = 1)
left join ВИЗИТЫ a_3
on(a_1.id = a_3.id and a_3.скидка<>0)
left join ВИЗИТЫ a_4
on(a.id = a_4.id and a_4.возврат_денег = 1)
left join ВИЗИТЫ a_6
on(a.id = a_6.id)
left join ВИЗИТЫ a_9
on(a_1.id = a_9.id)
where o.typ=1 group by o.id
Этот запрос при обработке данных за 1 месяц "думает" порядка 15-18 сек. Не впечатляет...

А представьте отчёт за один год - тут и сервак подвесить не долго!
Я конечно понимаю, что тут большую часть тормозов создаёт представление...но по-другому переписать этот запрос, не используя представления, пока что знаний наверное не хватает, хотя может быть и сам запрос коряво написан.
Самое странное, что тот же самый запрос только не по отделам, а по услугам работает в разы быстрее, тот же случай с расчётом данных за 1 месяц "думает" порядка 4-5 сек! Хотя в том запросе первичный LEFT делается не с представлением,а с таблицей ВИЗИТЫ, отсюда наверное и выигрыш в скорости...
Пожалуйста, люди добрые помогите советом - что тут не так?[/b]