Моя интуиция говорит, что вы делаете что-то не так. Это звучит немного похоже на те истории, которые вы слышите, когда какая-то система не может работать, пока вы не перезагрузите сервер ночью: -)
Что-то не так с вашими запросами, количество строк у вас почти не зависит от производительности, и ваша база данных очень мала. Я не слишком знаком с SQL-сервером, но думаю, что у него есть довольно приятные инструменты для анализа запросов. Я также представляю, что есть способ регистрации медленных запросов.
Мне действительно кажется, что у вас отсутствует индекс. Конечно, вы можете подумать, что добавили правильные индексы, но пока вы не убедитесь, что они используются, это не имеет значения. Может быть, вы думаете, что у вас есть правильные, но ваши вопросы говорят об обратном.
Сначала выясните, как регистрировать ваши запросы. Очень хорошие шансы, что у вас есть убийца, выполняющий последовательное сканирование, которое исправит индекс.
Во-вторых, у вас может быть куча небольших запросов, которые его убивают. Например, у вас может быть какой-то объект «Пользователь», который попадает в базу данных каждый раз, когда вы ищите имя пользователя по идентификатору пользователя. Ищите места, где вы запрашиваете базу данных сто раз, и заменяете ее кешем - даже если этот «кеш» - не более чем частная переменная, которая стирается в конце запроса.
Суть в том, что я действительно сомневаюсь, что это что-то неправильно настроено в SQL Server. Я имею в виду, если бы вам приходилось перезагружать сервер каждую ночь, потому что система зависала, вы бы обвиняли систему или свой код? То же самое и здесь ... изучите инструменты, предоставляемые SQL Server, держу пари, что они довольно удобны: -)
Тем не менее, как только вы признаете, что делаете что-то не так, наслаждайтесь процессом. Для меня нет ничего лучше, чем оптимизация медленных запросов к базе данных. Просто удивительно, что вы можете взять запрос с 10-секундным временем выполнения и превратить его в один с 50-минутным временем выполнения с одним хорошо размещенным индексом.