С точки зрения чисто SQL Server, нет, вы не найдете лучшего способа сделать это.Если, возможно, ваша социальная сеть не имеет размер Facebook.Денормализация вашего дизайна данных (например, ведение счета в отдельной таблице) приведет к тому, что возможные источники данных будут синхронизированы.Он не должен выходить из синхронизации, если он правильно закодирован, но он может ...
Просто убедитесь, что у вас есть индекс состояния.В этот момент SQL не будет сканировать таблицу для подсчета, но вместо этого будет сканировать index .Индекс будет намного меньше (то есть больше данных поместится на странице диска).Если бы вы преобразовали свой статус в int, smallint или tinyint, вы бы получили еще больше индексных листов на странице диска и, следовательно, гораздо меньше операций ввода-вывода.Чтобы получить описание («активировано» и т. Д.), Используйте справочную таблицу.Таблица ссылок была бы настолько мала, что SQL просто сохранял бы все это в ОЗУ после первого доступа.
Теперь, если вы все еще думаете, что это слишком много (и не должно быть), вы можете прийтис гибридным методом.Вы можете сохранить ваш счетчик в отдельной таблице (который SQL будет хранить в ОЗУ, если это всего лишь одна запись) или, предполагая, что ваш сайт находится в asp.net, вы можете создать переменную Application для отслеживания количества.Вы можете увеличить его в Session_Start и уменьшить в Session_End.Но вам придется придумать способ сделать поток увеличения и уменьшения безопасным, чтобы две сессии не пытались обновить значение одновременно.