Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 оптимизация запроса  [new]
annetby
Member

Откуда:
Сообщений: 123
Прошу помощи:
adp проект, Форма содержит ленточную подформу, источник записи - функция (записей порядка 28000 на сегодня).
При загрузки формы проходит около 1 минуты, прежде же загрузятся данные.
Декомпиляция, изменение источника записей, уменьшение сортировочных полей, до одного не решило мою проблему. Единственное, что помогло, это - отказаться от сортировки. Это не вариант, поскольку поле по которому идет сортировка отображает deadline, это вычисляемое поле в запросе DaysToEventEndNewSort.
Можно ли как то увеличить скорость загрузки?
Спасибо.

Ниже запрос и план запроса.
13 дек 17, 14:31    [21030677]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
annetby
Member

Откуда:
Сообщений: 123
SELECT TOP 100 PERCENT CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END AS DaysToEventEndNewSort,
A.DirCode, A.RegistrCode, LEFT(A.LocName, 1) AS LocName, LEFT(A.MedName, 3) AS MedName, A.TypeName, A.OldType_ShortName, A.NameLS,
A.Declarant, A.DeclarantCountry, A.ExpertName, A.ExpertID, CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToCentrEnd AS varchar)
ELSE '---' END AS DaysToCentrEnd, CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS varchar) ELSE '---' END AS DaysToEventEnd,
LEFT(A.DocType, 1) AS DocType, A.EventsQuantity, LEFT(A.ChemistryState, 1) AS ChemistryState, LEFT(A.Status, 1) AS Status, A.State,
CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS varchar) ELSE '---' END AS DaysToEventEndNew, B.LoginName
FROM dbo.fn_TEList_Init() A CROSS JOIN
dbo.tTEList_SO B
WHERE (B.LoginName = SUSER_SNAME()) AND (@DirCode IS NULL OR
@DirCode = 'Все' OR
A.DirCode = @DirCode) AND (@NameLS IS NULL OR
@NameLS = 'Все' OR
A.NameLS LIKE '%' + @NameLS + '%' OR
@NameLS = '-- Отсутствует --' AND A.NameLS IS NULL) AND (@Declarant IS NULL OR
@Declarant = 'Все' OR
A.Declarant LIKE '%' + @Declarant + '%' OR
@Declarant = '-- Отсутствует --' AND A.Declarant IS NULL) AND (@DeclarantCountry IS NULL OR
@DeclarantCountry = 'Все' OR
A.DeclarantCountry = @DeclarantCountry OR
@DeclarantCountry = '-- Отсутствует --' AND A.DeclarantCountry IS NULL) AND (@ExpertID IS NULL OR
@ExpertID = '-1' OR
A.ExpertID = @ExpertID OR
@ExpertID = '0' AND A.ExpertID IS NULL) AND (@DocType IS NULL OR
@DocType = 'Все' OR
A.DocType = @DocType OR
@DocType = '?? Отсутствует ??' AND A.DocType IS NULL) AND (@Status IS NULL OR
@Status = 'Все' OR
A.Status = @Status) AND (@State IS NULL OR
@State = 'Все' OR
A.State = @State)
ORDER BY DaysToEventEndNewSort


Сообщение было отредактировано: 13 дек 17, 14:59
13 дек 17, 14:31    [21030678]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
annetby
Member

Откуда:
Сообщений: 123
DECLARE @DirCode varchar(20), @NameLS varchar(20),  @Declarant varchar(20),  @DeclarantCountry varchar(20),  @DocType varchar(20),  @Status varchar(20),  @State varchar(20)    SET @DirCode ='Все'
 SET @NameLS ='Все'
 SET @Declarant ='Все'
 SET @DeclarantCountry ='Все'
 SET @DocType ='Все'
 SET @Status ='Все'
 SET @State ='Все'    --SET @Date = CONVERT(datetime, CONVERT(char,GETDATE(),1),1)
 SELECT     TOP 100 PERCENT CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END AS DaysToEventEndNewSort,                         DirCode, RegistrCode, LEFT(LocName, 1) AS LocName, LEFT(MedName, 3) AS MedName, TypeName, Ol


Сообщение было отредактировано: 13 дек 17, 15:00
13 дек 17, 14:34    [21030698]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
annetby
Member

Откуда:
Сообщений: 123
|--Sort(ORDER BY:([Expr1026] ASC))
       |--Compute Scalar(DEFINE:([Expr1026]=If (If (Convert([tTheoryEvents].[IsDossierReturn])=1) then 'Возврат Досье' else If (Convert([tTheoryEvents].[IsArchive])=1) then 'Архив' else If (Convert([tTheoryEvents].[IsCommission])=1) then 'Комиссия' else If
            |--Hash Match(Right Outer Join, HASH:([tExpType].[Id])=([tTheory].[TheoryTypeID_Old]), RESIDUAL:([tTheory].[TheoryTypeID_Old]=[tExpType].[Id]))
                 |--Table Scan(OBJECT:([LFFASQL].[dbo].[tExpType]))
                 |--Hash Match(Right Outer Join, HASH:([tTheoryGroupType].[Type_ID])=([tTheory].[TheoryTypeID]), RESIDUAL:([tTheory].[TheoryTypeID]=[tTheoryGroupType].[Type_ID]))
                      |--Nested Loops(Left Outer Join, OUTER REFERENCES:([tTheoryGroupType].[Type_Name]))
                      |    |--Nested Loops(Left Outer Join, OUTER REFERENCES:([tTheoryGroupType].[Type_Med_ID]))
                      |    |    |--Clustered Index Scan(OBJECT:([LFFASQL].[dbo].[tTheoryGroupType].[PK_tTheoryGroupType]))
                      |    |    |--Hash Match(Cache, HASH:([tTheoryGroupType].[Type_Med_ID]), RESIDUAL:([tTheoryGroupType].[Type_Med_ID]=[tTheoryGroupType].[Type_Med_ID]))
                      |    |         |--Nested Loops(Left Outer Join, OUTER REFERENCES:([tTheoryGroupMeds].[Med_Loc_ID]))
                      |    |              |--Clustered Index Seek(OBJECT:([LFFASQL].[dbo].[tTheoryGroupMeds].[PK_tTheoryGroupMeds]), SEEK:([tTheoryGroupMeds].[Med_ID]=[tTheoryGroupType].[Type_Med_ID]) ORDERED FORWARD)
                      |    |              |--Clustered Index Seek(OBJECT:([LFFASQL].[dbo].[tTheoryGroupLocation].[PK_tTheoryGroupLocation]), SEEK:([tTheoryGroupLocation].[Loc_ID]=[tTheoryGroupMeds].[Med_Loc_ID]) ORDERED FORWARD)
                      |    |--Clustered Index Seek(OBJECT:([LFFASQL].[dbo].[tTheoryGroupType_Names].[PK_tTheoryGroupType_Names]), SEEK:([tTheoryGroupType_Names].[TheoryType_Name]=[tTheoryGroupType].[Type_Name]) ORDERED FORWARD)
                      |--Nested Loops(Inner Join, WHERE:(([@Status]=NULL OR [@Status]='Все') OR If (Convert([tTheoryEvents].[IsDossierReturn])=1 OR Convert([tTheoryEvents].[IsCommission])=1) then 'Завершенный' else If ([tTheoryResultNames].[Rank]=1) then '
                           |--Stream Aggregate(DEFINE:([Expr1005]=MAX([tTodaysDate].[Today])))
                           |    |--Top(1)
                           |         |--Clustered Index Scan(OBJECT:([LFFASQL].[dbo].[tTodaysDate].[PK_tTodaysDate]), ORDERED BACKWARD)
                           |--Hash Match(Right Outer Join, HASH:([tTheoryResultNames].[ResultName])=([tTheoryEvents].[Result]), RESIDUAL:([tTheoryResultNames].[ResultName]=[tTheoryEvents].[Result]))
                                |--Clustered Index Scan(OBJECT:([LFFASQL].[dbo].[tTheoryResultNames].[PK_tTheoryResultNames]))
                                |--Hash Match(Right Outer Join, HASH:([tExpert].[ExID])=([tTheory].[ExID]), RESIDUAL:([tTheory].[ExID]=[tExpert].[ExID]))
                                     |--Compute Scalar(DEFINE:([tExpert].[Name]=dbo.tExpert.[LastName]+' '+substring(dbo.tExpert.[FirstName], 1, 1)+'.'+substring(dbo.tExpert.[Patronymic], 1, 1)+'.'))
                                     |    |--Clustered Index Scan(OBJECT:([LFFASQL].[dbo].[tExpert].[PK_tExpert]))
                                     |--Filter(WHERE:(((([@DocType]=NULL OR [@DocType]='Все') OR [tTheoryEvents].[DocType]=Convert([@DocType])) OR ([@DocType]='?? Отсутствует ??' AND [tTheoryEvents].[DocType]=NULL)) AND (([@State]=NULL OR [@State]='Все') O
                                          |--Merge Join(Right Outer Join, MERGE:([tTheoryEvents].[ID])=([tTheory].[CurrentEventID]), RESIDUAL:([tTheory].[CurrentEventID]=[tTheoryEvents].[ID]))
                                               |--Clustered Index Scan(OBJECT:([LFFASQL].[dbo].[tTheoryEvents].[PK_tTheoryEvents]), ORDERED FORWARD)
                                               |--Sort(ORDER BY:([tTheory].[CurrentEventID] ASC))
                                                    |--Merge Join(Inner Join, MERGE:([tTheory].[DirCode])=([tTheoryEvents].[DirCode]), RESIDUAL:([tTheory].[DirCode]=[tTheoryEvents].[DirCode]))
                                                         |--Filter(WHERE:((([@Declarant]=NULL OR [@Declarant]='Все') OR like([tTheory].[Declarant], '%'+[@Declarant]+'%', NULL)) OR ([@Declarant]='-- Отсутствует --' AND [tTheory].[Declarant]=NULL)))
                                                         |    |--Clustered Index Scan(OBJECT:([LFFASQL].[dbo].[tTheory].[PK_tTheory]),  WHERE:(((([@DirCode]=NULL OR [@DirCode]='Все') OR [tTheory].[DirCode]=[@DirCode]) AND ((([@NameLS]=NULL OR [@NameLS]='Вс
                                                         |--Sort(ORDER BY:([tTheoryEvents].[DirCode] ASC))
                                                              |--Hash Match(Aggregate, HASH:([tTheoryEvents].[DirCode]), RESIDUAL:([tTheoryEvents].[DirCode]=[tTheoryEvents].[DirCode]))
                                                                   |--Clustered Index Scan(OBJECT:([LFFASQL].[dbo].[tTheoryEvents].[PK_tTheoryEvents]))


Сообщение было отредактировано: 13 дек 17, 14:59
13 дек 17, 14:34    [21030701]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
aleks222
Guest
1. Нафига те 28000 записей не клиенте? Микрософт очень толсто намекает, ограничивая 10 000 записей выборку в ADP.
2. Мой хрустальный шар треснул, при попытке заглянуть в dbo.fn_TEList_Init() и dbo.tTEList_SO.
3. Я так полагаю - это сильномохнатые вьюхи с кучей вычисляемых полей и соединений по этим полям...
13 дек 17, 14:38    [21030720]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
annetby
Member

Откуда:
Сообщений: 123
aleks222,
спасибо , что посмотрели.
Не скажу, что я асс, но я правда хочу разобраться:
1 - SELECT TOP - вроде ограничение
2 - не поняла совсем
3 - куча вычислений есть, но соединений по ним нет
13 дек 17, 14:44    [21030753]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
annetby
Member

Откуда:
Сообщений: 123
Я уже думаю формировать временную таблицу для решения моей проблемы
13 дек 17, 14:55    [21030817]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
TOP 100 PERCENT -- не ограничение,
а подарок тем, кто строит запросы
в графическом построителе вьюх.

опубликуйте код dbo.fn_TEList_Init()
и убедитесь во всей куче соединений воочию
13 дек 17, 14:56    [21030824]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Добрый Э - Эх
Guest
annetby
1 - SELECT TOP - вроде ограничение
у тебя там топ 100%. Так себе ограничение......
13 дек 17, 15:00    [21030848]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
annetby
Member

Откуда:
Сообщений: 123
Yasha123 ,
не сразу поняла , соединений - тьма, 12 таблиц, это правда.
Я подумала о соединениях с вычисляемыми полями , сорри
13 дек 17, 15:01    [21030852]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
aleks222
Guest
1. top 100 %. Ога.
2. Эффективное написание запросов требует использования не вьюх, а таблиц. По минимуму.
3. Выход на "лишь бы щас работало": запихиваешь результат запроса БЕЗ сортировки во временную таблицу. Выбираешь из временной с сортировкой.
13 дек 17, 15:09    [21030898]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Гигабайт Мегабайтович Килобайтов
Member [заблокирован]

Откуда:
Сообщений: 5975
после быстрого взгляда cross двух функций и потом попытка объединить результаты типа джоин. наверняка в построено в построителе запросов. без понимания того что таки надо получить в итоге.
1) нафиг выкинуть cross join ибо по всей видимости dbo.tTEList_SO отвечает за доступ , но к чему фиг поймёшь
2) а может таки посмотреть что есть в dbo.fn_TEList_Init()
3) нормально переписать условие where
13 дек 17, 15:10    [21030905]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
annetby
Member

Откуда:
Сообщений: 123
Ребята, всем огромное спасибо за отклики.
что то совсем непонятные для меня вещи: убирала cross join из запроса, и по времени на 5 секунд дольше загружалась форма, 64 сек.
и с TOP 100 PERCENT --играла, ставила 10.
запрос на выполнение срабатывает за 23 сек., но при открытии формы в adp проекте и загрузки данных проходит 1 минута.
Вот пришла к вам за помощью.
13 дек 17, 15:22    [21030971]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
annetby
Member

Откуда:
Сообщений: 123
Гигабайт Мегабайтович Килобайтов,
dbo.tTEList_SO отвечал за сортировку (хранил сортировку пользователей для след Загрузки. Я убрала ее и оставила одно поле для сортировки и в одном порядке -по возрастанию). Подумалось, если Вы найдете причину так пусть уже и красиво будет с сортировкой :-)
13 дек 17, 15:28    [21031003]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Гигабайт Мегабайтович Килобайтов
Member [заблокирован]

Откуда:
Сообщений: 5975
annetby
Гигабайт Мегабайтович Килобайтов,
dbo.tTEList_SO отвечал за сортировку (хранил сортировку пользователей для след Загрузки. Я убрала ее и оставила одно поле для сортировки и в одном порядке -по возрастанию). Подумалось, если Вы найдете причину так пусть уже и красиво будет с сортировкой :-)

таки что-то у вас не то, в текущем виде dbo.tTEList_SO точно не отвечает за сортировку ибо вы сортируете по полю из dbo.fn_TEList_Init()

CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END
вы хоть понимаете что тут происходит и как ведет себя сортировка в данном случае?))
13 дек 17, 15:36    [21031053]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Гигабайт Мегабайтович Килобайтов
Member [заблокирован]

Откуда:
Сообщений: 5975
Гигабайт Мегабайтович Килобайтов
annetby
Гигабайт Мегабайтович Килобайтов,
dbo.tTEList_SO отвечал за сортировку (хранил сортировку пользователей для след Загрузки. Я убрала ее и оставила одно поле для сортировки и в одном порядке -по возрастанию). Подумалось, если Вы найдете причину так пусть уже и красиво будет с сортировкой :-)

таки что-то у вас не то, в текущем виде dbo.tTEList_SO точно не отвечает за сортировку ибо вы сортируете по полю из dbo.fn_TEList_Init()

CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END
вы хоть понимаете что тут происходит и как ведет себя сортировка в данном случае?))

а самый лучший вариант таки раскрыть функцию и препарировать исходные данные.
13 дек 17, 15:37    [21031056]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
aleks222
Guest
annetby
и с TOP 100 PERCENT --играла, ставила 10.


annetby
Подумалось, если Вы найдете причину так пусть уже и красиво будет с сортировкой :-)


Причину мы установили: полное непонимание сути.

Лечение: только самолечение.
13 дек 17, 15:41    [21031066]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
annetby
Member

Откуда:
Сообщений: 123
Гигабайт Мегабайтович Килобайтов, надеюсь, что хотя бы имею представление.
было так:
ORDER BY
CASE WHEN B.DirCode = 1 THEN A.DirCode WHEN .... END,
CASE WHEN B.DirCode = 2 THEN A.DirCode ... END DESC,

Я убрала сортировку сложную и возможно не нужную - CROSS JOIN dbo.tTheoryExpandedList_SortOrder B
Я правда хочу разобраться, что не так.
13 дек 17, 15:47    [21031079]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Гигабайт Мегабайтович Килобайтов
Member [заблокирован]

Откуда:
Сообщений: 5975
для уточнения - текст данного запроса уходит с клиента или таки это всё на сервере?

CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END

вы тут приводите к типу varchar(сколько то ) а потом сортируете этот varchar , что происходит очень медленно. это при условии что "когда вы убрали сортировку результат приемлем".


и таки хотелось бы посмотреть таки что было в сортировки до то, как вы её порезали.
13 дек 17, 16:03    [21031142]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
annetby,

Для начала вот так. И начнем разбираться по Вашим nested loops.
SELECT TOP 100 PERCENT 
	-- вычисляемый столбец для сортировки
	CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END AS DaysToEventEndNewSort
	-- обычные вычисляемые столбцы
	,A.DirCode
	,A.RegistrCode
	,LEFT(A.LocName, 1) AS LocName
	,LEFT(A.MedName, 3) AS MedName
	,A.TypeName
	,A.OldType_ShortName
	,A.NameLS
	,A.Declarant
	,A.DeclarantCountry
	,A.ExpertName
	,A.ExpertID
	,CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToCentrEnd AS varchar) ELSE '---' END AS DaysToCentrEnd
	,CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS varchar) ELSE '---' END AS DaysToEventEnd
	,LEFT(A.DocType, 1) AS DocType
	,A.EventsQuantity
	,LEFT(A.ChemistryState, 1) AS ChemistryState
	,LEFT(A.Status, 1) AS Status
	,A.State
	,CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS varchar) ELSE '---' END AS DaysToEventEndNew
	,B.LoginName
FROM dbo.fn_TEList_Init() A -- отсюда не прилетает вычисляемый DaysToEventEndNewSort, а сортируем по нему
CROSS JOIN dbo.tTEList_SO B -- поэтому связка еще и ограничивается чудовищными фильтрами
WHERE (
-- фильтры по части B
B.LoginName = SUSER_SNAME()
) 
-- фильтры по части A
AND (@DirCode IS NULL OR @DirCode = 'Все' OR A.DirCode = @DirCode)
AND (@NameLS IS NULL OR @NameLS = 'Все' OR A.NameLS LIKE '%' + @NameLS + '%' OR
@NameLS = '-- Отсутствует --' AND A.NameLS IS NULL)
AND (@Declarant IS NULL OR @Declarant = 'Все' OR A.Declarant LIKE '%' + @Declarant + '%' OR
@Declarant = '-- Отсутствует --' AND A.Declarant IS NULL)
AND (@DeclarantCountry IS NULL OR @DeclarantCountry = 'Все' OR A.DeclarantCountry = @DeclarantCountry OR
@DeclarantCountry = '-- Отсутствует --' AND A.DeclarantCountry IS NULL)
AND (@ExpertID IS NULL OR @ExpertID = '-1' OR A.ExpertID = @ExpertID OR @ExpertID = '0' AND A.ExpertID IS NULL)
AND (@DocType IS NULL OR @DocType = 'Все' OR A.DocType = @DocType OR @DocType = '?? Отсутствует ??' AND A.DocType IS NULL)
AND (@Status IS NULL OR @Status = 'Все' OR A.Status = @Status) AND (@State IS NULL OR @State = 'Все' OR A.State = @State)
-- сортировка по вычисляемому столбцу
ORDER BY DaysToEventEndNewSort
13 дек 17, 16:11    [21031170]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
annetby,

Теперь сюда скриншотик следующего запроса. И далее мы Вам таки ткнем пальцем в некошерное место.
exec sp_spaceused [tTheoryEvents]
exec sp_spaceused [tTheory]
exec sp_spaceused [tExpType]
exec sp_spaceused [tTheoryGroupType]
exec sp_spaceused [tTheoryGroupMeds]
exec sp_spaceused [tTheoryGroupLocation]
exec sp_spaceused [tTheoryGroupType_Names]
exec sp_spaceused [tTodaysDate]
exec sp_spaceused [tTheoryResultNames]
exec sp_spaceused [tExpert]
13 дек 17, 16:15    [21031186]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
invm
Member

Откуда: Москва
Сообщений: 9279
Гигабайт Мегабайтович Килобайтов
CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END

вы тут приводите к типу varchar
Тип данного выражения - int.
Потому что приоритет int выше, чем varchar.
13 дек 17, 16:15    [21031187]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
annetby,

Хотя в принципе и так очевидно, что у Вас не хватает некластерных индексов на таблице [tTheoryEvents]. Ну или статистика по ним уже некошерная.
13 дек 17, 16:17    [21031193]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
invm
Member

Откуда: Москва
Сообщений: 9279
annetby,

Показывайте актуальный план в формате sqlplan. И не картинкой, а файлом. Тот, который показан, не соответствует обсуждаемому запросу.
13 дек 17, 16:26    [21031223]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
annetby
Member

Откуда:
Сообщений: 123
Гигабайт Мегабайтович Килобайтов,
для уточнения - текст данного запроса уходит с клиента или таки это всё на сервере?
пользователи работают с ade файлом, который находится локально на компе пользователя.
CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END
вы тут приводите к типу varchar(сколько то ) а потом сортируете этот varchar , что происходит очень медленно. это при условии что "когда вы убрали сортировку результат приемлем".


в этом наверное намудрила, пользователю непонятно 9999, поэтому у меня 2 поля формируется одно int- сортирую по нему, а на экран в форме подтягиваеьтся другое поле с "--". В сортировке не нужен CAST.
13 дек 17, 16:27    [21031228]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить