Несколько вещей, которые нужно сделать:
1) Убедитесь, что вы сравниваете производительность справедливо, очищая кэш данных и плана выполнения после каждого запуска теста. Вы можете очистить их, используя (рекомендуется делать это только в вашей среде разработки / тестирования):
CHECKPOINT -- force dirty pages in the buffer to be written to disk
DBCC DROPCLEANBUFFERS -- clear the data cache
DBCC FREEPROCCACHE -- clear the execution plan cache
2) Запустите SQL Profiler, чтобы записать Чтение / Запись / Процессор / Продолжительность для каждой ситуации (с индексами или без них). Это даст вам ряд метрик для сравнения (т. Е. Только с временем, показанным в SSMS).
Edit:
Чтобы запустить трассировку SQL Profiler, в Management Studio выберите Инструменты -> SQL Server Profiler. При появлении запроса укажите сервер базы данных для запуска трассировки. Появится диалоговое окно «Свойства трассировки» - вы можете просто нажать «Выполнить», чтобы запустить трассировку по умолчанию. Затем просто выполните свою хранимую процедуру и увидите, что она появляется в SQL Profiler - вместе с ней будет показана продолжительность, количество операций чтения и т. Д.
3) Тестируйте с гораздо большими объемами данных, чем у вас уже есть. Если вы тестируете с небольшими объемами данных, то разницу часто трудно увидеть только по длительности.
Я недавно написал здесь о том, как честно протестировать производительность различных вариантов запроса, что более подробно описывает, как я это делаю.