Пожалуйста, помогите мне по оптимизации для запроса ниже:Необходимость оптимизации для запроса
select s.ZahialgaID, sum(s.Quantity) total_qty, MAX(s.date_moved) MaxDate
from
tCardMoveForTailan s
where
(
s.date_moved is null or
s.date_moved <= @date_end or
convert(varchar(20), s.date_moved, 111) = convert(varchar(20), @date_end, 111)
) and
(
s.TsehID = GoyoMSDB.dbo.GetTsehByCode('nyrav') or
s.TsehID = GoyoMSDB.dbo.GetTsehByCode('rejected') or
s.TsehID = GoyoMSDB.dbo.GetTsehByCode('orooson') or
s.TsehID = GoyoMSDB.dbo.GetTsehByCode('zereg')
)
group by s.ZahialgaID;
использовать эти данные для запроса: http://orion.mn/updateapp/data_to_play.rar
Теперь этот запрос выполняется в течение 10 секунд на 200000 строк. Но я думаю, что для такого простого запроса возможно 1 или 2 секунды. Пожалуйста, помогите мне в решении этой задачи!
Таблица tCardMoveForTailan имеет кластерный индекс, как показано ниже:
create clustered index IX_tCardMoveForTailan_2 on tCardMoveForTailan (ZahialgaID, TsehID, date_moved);
Любое предложение будет оценено! Функция
В соответствии с просьбой комментариями, тело dbo.GetTsehByCode():
CREATE FUNCTION GetTsehByCode (@code nvarchar(50))
RETURNS int AS
BEGIN
declare @tsehid int
select @tsehid = TsehID from tTseh where [email protected]
RETURN @tsehid
END
В таблице tTseh имеет только 10 строк.
Я думаю, что узким местом является функция 'GoyoMSDB.dbo.GetTsehByCode()', который вызывается для каждого и каждой строки. Можете ли вы опубликовать его код? Возможно, он может быть переписан как функция с табличной оценкой. – HoneyBadger
, вероятно, UDF (GoyoMSDB.dbo.GetTsehByCode) пытаются прокомментировать их один за другим и проверить производительность, но я не могу получить это условие: 's.date_moved <= @ date_end или convert (varchar (20), s .date_moved, 111) = convert (varchar (20), @ date_end, 111) 'Мне кажется бессмысленным, что вы уже сравниваете значения как даты, почему их конвертировать – Gubr
'GetTsehByCode' похоже, что он должен быть заменен поисковой таблицей, но я действительно не могу быть уверен, если вы не опубликуете эту функцию. –