Там схема проблемная, хотя, если всего несколько тысч записей, то ничего.Easbayguy wrote:А что его оптимизировать? Проверить наличие составного индекса основанного fulltrades(id,market,rounddate), если есть несколько индексов зафиксировать execution plan с хинтом.OtherSide wrote:Зашибись
Я вот как раз код пишу
ALTER FUNCTION [dbo].[GetClusters](
@tickerid smallint,
@market tinyint,
@period int,
@startdate smalldatetime ,
@finishdate smalldatetime,
@step money)
RETURNS @Clusters TABLE
(
period smalldatetime not NULL,
price money not null,
quantity int not null,
buyquantity int not null
)
AS
BEGIN
INSERT @Clusters
select dbo.DateRound(t.period,@period) as period,
round(PRICE / @step,0) * @step as price,
SUM(quantity) as quantity,
SUM(buyquantity) as buyquantity
from
(
SELECT
rounddate as period,
PRICE as price,
SUM(quantity) as quantity,
SUM(quantity*ttype) as buyquantity
FROM fulltrades
where ID = @tickerid and rounddate >= @startdate and rounddate < @finishdate and market = @market
group by PRICE, rounddate) as t
group by round(PRICE / @step,0) * @step, dbo.DateRound(period,@period)
option (RECOMPILE)
RETURN;
END;
Попросите пожалуйста ваших гениев подсказать, как оптимизировать данный код, что бы работал быстрее? Очевидно, если они пишут по 80 минут в час, а поменять нужно всего несколько строк, очевидно у них на это уйдет не более 3-5 минут?
А так, когда вижу временные интервалы, то рука тянется к date dim. Которого здесь нет.
А там будет легче суммировать и по датам и по интервалам, как ни странно