01.10.2013, 12:17 | #1 |
Участник
|
тормозят селекты по вьюхам
Всем привет.
может кто сталкивался: простые запросы к вьюхам адски тормозят. Код: select top 251 "phonecall0".Subject as "subject" , "phonecall0".StateCode as "statecode" , "phonecall0".PriorityCode as "prioritycode" , "phonecall0".ScheduledEnd as "scheduledend" , "phonecall0".CreatedBy as "createdby" , "phonecall0".RegardingObjectId as "regardingobjectid" , "phonecall0".ActivityId as "activityid" , "phonecall0".CreatedOn as "createdon" , "phonecall0".ModifiedOn as "modifiedon" , "phonecall0".New_sringtime as "new_sringtime" , "phonecall0".OwnerId as "ownerid" , "phonecall0".New_durationsecs as "new_durationsecs" , "phonecall0".OverriddenCreatedOn as "overriddencreatedon" , "phonecall0".CreatedByName as "createdbyname" , "phonecall0".CreatedByYomiName as "createdbyyominame" , "phonecall0".RegardingObjectTypeCode as "regardingobjecttypecode" , "phonecall0".RegardingObjectIdName as "regardingobjectidname" , "phonecall0".RegardingObjectIdYomiName as "regardingobjectidyominame" , "phonecall0".OwnerIdType as "owneridtype" , "phonecall0".OwnerIdName as "owneridname" , "phonecall0".OwnerIdYomiName as "owneridyominame" from PhoneCall as "phonecall0" (NOLOCK) join SystemUser as "aa" (NOLOCK) on ("phonecall0".OwningUser = "aa".SystemUserId and (("aa".BusinessUnitId = '571EA980-8733-E011-B92E-001A6433B300'))) join SystemUser as "ad" (NOLOCK) on ("phonecall0".CreatedBy = "ad".SystemUserId and (("ad".BusinessUnitId = '7520170E-0D94-DF11-9328-001A6433B300'))) where (( "phonecall0".CreatedOn >= '2013-06-30 20:00:00' and "phonecall0".CreatedOn < '2013-08-31 20:00:00' )) order by "phonecall0".Subject asc если сделать вьюху phonecall1 с изменением всего 1 поля: Код: CASE WHEN XXowner.OwnerIdType = 8 THEN XXowner.OwnerId ELSE NULL END AS OwningUser, Код: XXowner.OwnerId AS OwningUser, CRM 2011 + RU 14 есть идеи, что можно сделать? |
|
01.10.2013, 12:56 | #2 |
Участник
|
тоже есть такие проблемные запросы.... и у юзеров отваливается все по таймауту
|
|
01.10.2013, 13:01 | #3 |
Участник
|
Сколько у Вас звонков, пользователей?
Индексы есть на полях CreatedOn, Subject, OwningUser, SystemUserId, CreatedBy? Когда последний раз делался реиндекс базы. |
|
01.10.2013, 14:05 | #4 |
Участник
|
4.5млн звонков, пользователей в районе 500-700
индексы - в каких таблицах? реиндексируется вся база каждую ночь. |
|
01.10.2013, 14:34 | #5 |
Участник
|
У меня базы CRM под рукой нет.
Но те поля, что у Вас в where и в join надо индексировать. PhoneCall.CreatedOn PhoneCall.Subject phonecall.OwningUser phonecall.CreatedBy Посмотрите план выполнения запроса. Где он начинает тратить много времени и добавьте индекс. |
|
01.10.2013, 18:09 | #6 |
Участник
|
Eugene.Ostroukhov,
если в запросе поставить OPTION (RECOMPILE), ситуация поменяется в какую-нибудь сторону? |
|
02.10.2013, 10:50 | #7 |
Участник
|
|
|
02.10.2013, 17:46 | #8 |
Участник
|
вот еще что кажется странным, если у кого то есть возможность проверить и сказать тут - так же это у него или нет:
первый селект (в первом посте) - снят Sql Profiler-ом. как выяснили - тормозит колонка OwningUser, которая во вьюхе вычисляется как case при этом: если добавить в этот селект условие OwnerIdType = 8 ( у нас только пользователи) - селекты начинают так же быстро работать, как и изменение case-а во вьюхе на просто OwnerId может кто-то проверить у себя, какие селекты отправляются в SQL при выполнении каикх-то сохраненных представлений (UserQuery) ? |
|
22.10.2013, 16:25 | #9 |
Участник
|
ап
|
|