powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / оптимизация запроса
25 сообщений из 29, страница 1 из 2
оптимизация запроса
    #39569019
annetby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу помощи:
adp проект, Форма содержит ленточную подформу, источник записи - функция (записей порядка 28000 на сегодня).
При загрузки формы проходит около 1 минуты, прежде же загрузятся данные.
Декомпиляция, изменение источника записей, уменьшение сортировочных полей, до одного не решило мою проблему. Единственное, что помогло, это - отказаться от сортировки. Это не вариант, поскольку поле по которому идет сортировка отображает deadline, это вычисляемое поле в запросе DaysToEventEndNewSort.
Можно ли как то увеличить скорость загрузки?
Спасибо.

Ниже запрос и план запроса.
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569020
annetby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
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
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569024
annetby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569025
annetby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
|--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]))
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569027
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Нафига те 28000 записей не клиенте? Микрософт очень толсто намекает, ограничивая 10 000 записей выборку в ADP.
2. Мой хрустальный шар треснул, при попытке заглянуть в dbo.fn_TEList_Init() и dbo.tTEList_SO.
3. Я так полагаю - это сильномохнатые вьюхи с кучей вычисляемых полей и соединений по этим полям...
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569032
annetby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,
спасибо , что посмотрели.
Не скажу, что я асс, но я правда хочу разобраться:
1 - SELECT TOP - вроде ограничение
2 - не поняла совсем
3 - куча вычислений есть, но соединений по ним нет
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569039
annetby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я уже думаю формировать временную таблицу для решения моей проблемы
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569041
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TOP 100 PERCENT -- не ограничение,
а подарок тем, кто строит запросы
в графическом построителе вьюх.

опубликуйте код dbo.fn_TEList_Init()
и убедитесь во всей куче соединений воочию
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569042
annetby1 - SELECT TOP - вроде ограничениеу тебя там топ 100%. Так себе ограничение......
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569043
annetby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123 ,
не сразу поняла , соединений - тьма, 12 таблиц, это правда.
Я подумала о соединениях с вычисляемыми полями , сорри
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569051
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. top 100 %. Ога.
2. Эффективное написание запросов требует использования не вьюх, а таблиц. По минимуму.
3. Выход на "лишь бы щас работало": запихиваешь результат запроса БЕЗ сортировки во временную таблицу. Выбираешь из временной с сортировкой.
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569052
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
после быстрого взгляда cross двух функций и потом попытка объединить результаты типа джоин. наверняка в построено в построителе запросов. без понимания того что таки надо получить в итоге.
1) нафиг выкинуть cross join ибо по всей видимости dbo.tTEList_SO отвечает за доступ , но к чему фиг поймёшь
2) а может таки посмотреть что есть в dbo.fn_TEList_Init()
3) нормально переписать условие where
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569067
annetby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, всем огромное спасибо за отклики.
что то совсем непонятные для меня вещи: убирала cross join из запроса, и по времени на 5 секунд дольше загружалась форма, 64 сек.
и с TOP 100 PERCENT --играла, ставила 10.
запрос на выполнение срабатывает за 23 сек., но при открытии формы в adp проекте и загрузки данных проходит 1 минута.
Вот пришла к вам за помощью.
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569073
annetby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гигабайт Мегабайтович Килобайтов,
dbo.tTEList_SO отвечал за сортировку (хранил сортировку пользователей для след Загрузки. Я убрала ее и оставила одно поле для сортировки и в одном порядке -по возрастанию). Подумалось, если Вы найдете причину так пусть уже и красиво будет с сортировкой :-)
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569081
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
annetbyГигабайт Мегабайтович Килобайтов,
dbo.tTEList_SO отвечал за сортировку (хранил сортировку пользователей для след Загрузки. Я убрала ее и оставила одно поле для сортировки и в одном порядке -по возрастанию). Подумалось, если Вы найдете причину так пусть уже и красиво будет с сортировкой :-)
таки что-то у вас не то, в текущем виде dbo.tTEList_SO точно не отвечает за сортировку ибо вы сортируете по полю из dbo.fn_TEList_Init()

CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END
вы хоть понимаете что тут происходит и как ведет себя сортировка в данном случае?))
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569082
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гигабайт Мегабайтович КилобайтовannetbyГигабайт Мегабайтович Килобайтов,
dbo.tTEList_SO отвечал за сортировку (хранил сортировку пользователей для след Загрузки. Я убрала ее и оставила одно поле для сортировки и в одном порядке -по возрастанию). Подумалось, если Вы найдете причину так пусть уже и красиво будет с сортировкой :-)
таки что-то у вас не то, в текущем виде dbo.tTEList_SO точно не отвечает за сортировку ибо вы сортируете по полю из dbo.fn_TEList_Init()

CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END
вы хоть понимаете что тут происходит и как ведет себя сортировка в данном случае?))
а самый лучший вариант таки раскрыть функцию и препарировать исходные данные.
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569086
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
annetbyи с TOP 100 PERCENT --играла, ставила 10.


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

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

Лечение: только самолечение.
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569091
annetby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гигабайт Мегабайтович Килобайтов, надеюсь, что хотя бы имею представление.
было так:
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
Я правда хочу разобраться, что не так.
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569111
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для уточнения - текст данного запроса уходит с клиента или таки это всё на сервере?

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

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


и таки хотелось бы посмотреть таки что было в сортировки до то, как вы её порезали.
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569118
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
annetby,

Для начала вот так. И начнем разбираться по Вашим nested loops.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
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
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569123
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
annetby,

Теперь сюда скриншотик следующего запроса. И далее мы Вам таки ткнем пальцем в некошерное место.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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]
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569124
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гигабайт Мегабайтович КилобайтовCASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END

вы тут приводите к типу varcharТип данного выражения - int.
Потому что приоритет int выше, чем varchar.
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569126
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
annetby,

Хотя в принципе и так очевидно, что у Вас не хватает некластерных индексов на таблице [tTheoryEvents]. Ну или статистика по ним уже некошерная.
...
Рейтинг: 0 / 0
оптимизация запроса
    #39569131
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
annetby,

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


в этом наверное намудрила, пользователю непонятно 9999, поэтому у меня 2 поля формируется одно int- сортирую по нему, а на экран в форме подтягиваеьтся другое поле с "--". В сортировке не нужен CAST.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / оптимизация запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]