Если вам не всегда нужны все столбцы, просто собираемся выбросить их, вы рассматривали возможность разделения таблицы?Это должно быть хорошо при условии, что вы можете изменить таблицу таким образом (что, к сожалению, обычно имеет место)
Если вы разделите таблицу, скажем, на 5 таблиц (примерно) 10 столбцов и назначите идентификатор (кластеризованный индекс)для каждой существующей в данный момент строки вам придется сканировать в 5 раз меньше диска (при условии, что все ваши столбцы находятся на одном и том же, помня, что если у вас нет индекса, он всегда будет извлекать все столбцы для всего).
Кроме создания индекса для каждого столбца, я предлагаю вам взглянуть на ваши запросы и попытаться решить, есть ли некоторые столбцы, которые вызываются очень редко, и другие, которые вызываются все время (особенно вместе).Когда я делал это в прошлом, я увидел значительные улучшения как прямой результат разделения таблицы на таблицы «Всегда», «Часто», «Редко» и «Почти никогда» вместе с таблицей «Обычно вместе» или двумя там..
Также это может помочь сделать это разделение по общим группам по предложениям, так как вероятно, что по крайней мере несколько столбцов будут гораздо более распространенными, чем другие.
Если вы действительно хотите лучшую производительность, ятакже может предложить, возможно, посмотреть на замену дисков и обновление оперативной памяти на SQL Server, ваша таблица должна использовать около 20 ГБ пространства, сколько времени потребуется текущим дискам для чтения 20 ГБ данных с диска в ОЗУ?Это будет ваш нижний предел времени выполнения запроса (если он не всегда в оперативной памяти, в этом случае даже при таком большом количестве запросов данных не должно быть слишком много времени)