Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите оптимизировать запрос [D5, MSSQL]


MakNik ©   (2003-12-22 13:31:00) 

Помогите, плз., оптимизировать запрос:
Select Cr.*,SubDepartment.Name as SubDepartmentName, Sex.name as SexName
, Ps.Name as PostName, Ct.name as CategoryName , CH.Name As CHAESCategoryName, DT.Name as Dismissal_TypeName, Cr.DateEnd
from SubDepartment, Sex
, Cards Cr LEFT OUTER JOIN Category Ct ON Cr.ID_Category=Ct.ID,
Cards Cr1 LEFT OUTER JOIN Post Ps ON Cr1.ID_Post=Ps.ID,
Cards Cr2 LEFT OUTER JOIN CHAESCategory CH ON Cr2.ID_CHAESCategory=CH.ID,
Cards Cr3 LEFT OUTER JOIN Dismissal_Type DT ON Cr3.ID_Dismissal_Type=DT.ID

Where
(SubDepartment.ID=Cr.ID_SubDepartment)
and (Cr.ID="6D666DA9-D132-48A5-AECE-126D623050EB")
and (Sex.ID=Cr.Sex)
and (Cr.ID=Cr1.ID) and (Cr.ID=Cr2.ID) and (Cr.ID=Cr3.ID)


Кщд   (2003-12-23 05:42:00) [1]

DKS (22.12.03 16:35) [9]
смысл?


ЮЮ   (2003-12-23 03:34:00) [2]

Оптимизировать стуктуру. Вряд ли оптимально использовать в качестве первичного ключа полк VarChar(36).


DKS   (2003-12-22 16:35:00) [3]

Если это возможно, замени
left join
на
inner join


MV   (2003-12-22 14:16:00) [4]

Согласен.


JibSkeart   (2003-12-22 14:09:00) [5]

а также можешь попробовать индекс сделать кластерным .


MV   (2003-12-22 14:07:00) [6]

Ох ты господи, сам офигел, что я тут написал...
И так:
Судя по всему, у тебя все ID - первичные ключи, соотв-нно, индексированы. Попробу добавить "инверсные входы" - индексы по внешним ключам на поля типа : Cr.SEX, Cr.ID_Category, Cr.ID_SubDepartment, Cr.ID_Post, Cr.ID_CHAESCategory, Cr.ID_Dismissal_Type и т.п. Это обычная практика.
Должно существенно ускорить ввыполнение запроса.


Johnmen   (2003-12-22 14:04:00) [7]

>MV (22.12.03 14:00)
>Left Join == Join

Это как понимать ?


MV   (2003-12-22 14:00:00) [8]

Ну, судя по всему, у тебя все ID - первичные ключи, соотв-нно, индексированы. Попробу добавить "инверсный вход" - индекс по Cr.SEX. Мож, чуть быстрее будет. Ну, посмотри еще наличие индекса по полю внешнего ключа Cr.ID_SubDepartment
Ну, еще Left Join == Join (впрочем, дело вкуса)


MakNik   (2003-12-22 13:57:00) [9]


> JibSkeart ©

Выбирается каждый раз только одна запись. А время выполнения 1с. (но это еще при пустой базе)...


Johnmen   (2003-12-22 13:53:00) [10]

Если правильно въехал :)
Select Cr.*,SubDepartment.Name as SubDepartmentName, Sex.name as SexName
, Ps.Name as PostName, Ct.name as CategoryName , CH.Name As CHAESCategoryName, DT.Name as Dismissal_TypeName, Cr.DateEnd
from SubDepartment, Sex
, Cards Cr
LEFT JOIN Category Ct ON Cr.ID_Category=Ct.ID
LEFT JOIN Post Ps ON Cr.ID_Post=Ps.ID
LEFT JOIN CHAESCategory CH ON Cr.ID_CHAESCategory=CH.ID
LEFT JOIN Dismissal_Type DT ON Cr.ID_Dismissal_Type=DT.ID

Where
(SubDepartment.ID=Cr.ID_SubDepartment)
and (Cr.ID="6D666DA9-D132-48A5-AECE-126D623050EB")
and (Sex.ID=Cr.Sex)
and (Cr.ID=Cr1.ID) and (Cr.ID=Cr2.ID) and (Cr.ID=Cr3.ID)


JibSkeart   (2003-12-22 13:44:00) [11]

В принципе тут оптимизировать нечего
но можешь взглянуть на план запроса ,
хотя приблизително понятно что там будет ,

вопрос в другом как ты хочешь его оптимизировать

что клиент долго рефрешит ??
если да то сколько записей ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо