1) Masz kilka pól zarówno w klauzulach Partition By, jak i Order By. To nie ma sensu, ponieważ będziesz mieć jedną i tylko jedną wartość dla każdej (sma.FastPer, sma.SlowPer). Możesz bezpiecznie usunąć te pola z części Sortuj według funkcji okna.
2) Zakładając, że masz już indeksy zapewniające odpowiednią wydajność w „initialSmas i dołączam do initialSmas” i że już masz indeksy (initialSmas.Symbol, initialSmas.Period, initialSmas.TradeDate) najlepszym, co możesz zrobić, to skopiować smaComparisonsByPer do tabela tymczasowa, w której można utworzyć indeks (sma.Symbol, sma.FastPer, sma.SlowPer, sma.TradeDate)