Arinyshka, можно полюбопытствовать?
SET @DateStart = CAST(CAST(@DateStart AS INT) AS DATETIME)
SET @DateEnd = CAST(CAST(@DateEnd AS INT) AS DATETIME)
Что это за танцы с бубном? Никогда такого не видел, но ощущение, что это написано не просто так. Время отрезает что ли? Если да, то это хакерство, которое привязывает процедуру к внутреннему представлению типа DateTime. Если он изменится в какой-то будущей версии, ваш код перестанет работать. Лучше использовать функцию datepart или partdate - не помню, как называется.
По сути вопроса: Sla уже предложил профайлер. Хотя можно оценить эффективность и чисто умозрительно.
Например, X JOIN Y ON X.ID=Y.XID JOIN Z ON Y.ID=Z.YID выполняется последовательно. Если X содержит миллион записей, Y - полмиллиона и Z - тысячу, то в начале после первого объединения получится результат объёмом порядка полмиллиона, который затем будет соединяться с Z, что даст в итоге результат порядка тысячи записей.
Можно изменить порядок соединения, например, X JOIN Y JOIN Z ON Y.ID=Z.YID ON X.ID=Y.XID. Тогда в начале будут соединены Y и Z, что даст результат порядка тысячи записей, который потом будет соединён с X, что даст опять же результат порядка тысячи записей. Вместо соединения миллиона с полумиллионом мы получили соединение миллиона с тысячей записей, что улучшит производительность.
Правда всё это к представленному запросу не относится, поскольку там: во-первых, OUTER JOIN, во-вторых все другие таблицы соединяются с первой
Но, допустим, INNER JOIN'ы можно попробовать "поднять" наверх поскольку их результат скорее всего уменьшает объём выборки, и только потом применять LEFT JOIN'ы.
В любом случае профайлер покажет, как сервер выполняет запрос. Ещё следует учитывать, что по крайней мере с SQL Server 2000 была беда, когда хранимые процедуры обновлялись на старой долгоживущей базе. При их обновлении по неактуальной статистике таблиц создавался неоптимальный план исполнения, который иной раз порождал совершенно безумные шаги. В результате при обработке запросов перегонялись миллиарды несуществующийх записей, порождённых JOIN'ами, и процедуры зависали на часы и сутки.