Вы думаете с точки зрения «петель».На реляционной базе данных вы должны думать в терминах «наборов».Работа с циклами в хранимой процедуре часто выполняется с помощью курсоров.Он медленный (примерно в 50-100 раз медленнее, чем ориентированный на рабочий набор), и механизм блокировки, связанный с курсорами, может блокировать другие процессы.Вот почему вы всегда должны избегать их использования.
Самое быстрое решение - работа с хранимой процедурой.Об этом не может быть и речи.Самая большая разница в том, что он отключает весь сетевой трафикSP запускаются непосредственно в базе данных, нет замедления сетевого трафика.Хотя их отладка может быть трудной, но я слышал, что Visual Studio 2010 предлагает некоторые улучшения в этом отношении.
Следующее, о чем вы должны подумать, - это КАК реализовать хранимую процедуру:циклы и курсоры или быстрый набор ориентированный путь.
Исходя из вашего описания, вы можете получить много производительности, сохранив некоторые данные в двух таблицах: одна обычная таблица со всеми данными, а другая - "таблица окон", которая толькосодержит данные, которые вам нужны для заполнения этих 5 минут, 10 минут и 15 минут, ... баров.Если вы можете создать 15-минутный бар с данными трех последних 5-минутных баров, то сохраните эти 3 последние 5-минутные бары в таблице окон, когда прибудет 4-й 5-минутные бары, выбросьте самый старый 5-минутный бары и вставьтеновый 5 мин бар.Когда вы можете создать новый 30-минутный бар на основе последних 2-х 15-минутных баров, а затем сохранить эти 2-х 15-минутные бары, ... Постарайтесь, чтобы эта табличная панель была как можно меньше, чтобы она могла оставаться в памяти всехвремя.