Как пояснение к другим ответам, обе стратегии работают хорошо в зависимости от того, какую версию Sql Server вы используете.Если у вас корпоративная редакция, то я бы пошел путем разбиения таблиц, так как он требует меньше работы на стороне разработки.К сожалению, Microsoft ограничил разделение таблиц только корпоративной версией, хотя это функция практически во всех других базах данных, включая бесплатные альтернативы с открытым исходным кодом.Если вы застряли без корпоративной версии (многие считают, что это цена> $ 20 тыс. / Процессор), то хорошая альтернатива - перейти к подходу ручного разбиения, как вы сначала предложили.Другой альтернативой, которая не требует корпоративной версии, является использование покрывающих индексов.Хороший способ сделать это - использовать представление и создать материализованный индекс для представления, это в основном создание копии только тех данных, которые вам нужны на диске, без лишних затрат на перемещение данных вокруг себя.Допустим, вы создали представление с предложением where для включения только сегодняшних данных, а затем создали материализованный индекс для представления, фактически будет индекс, содержащий все данные за сегодня на диске, и возврат будет таким же быстрым, как если бы вывручную разделил данные.К сожалению, есть много ограничений в сложности представления, для которого вы можете создать индекс, но оно того стоит, когда оно работает, оно работает хорошо.