Более быстрое количество строк SQL Server 2008 sys.dm_db_partition_stats с классом Where

#sql #sql-server #sql-server-2008

#sql #sql-сервер #sql-server-2008

Вопрос:

 SELECT SUM(row_count)
FROM   sys.dm_db_partition_stats
WHERE  object_id = OBJECT_ID('TableName')
  

Люди говорят, что приведенный выше запрос выполняется быстрее, чем select count (*) .

Я хотел бы знать эквивалент select count(*) from table where name = 'awt' использования sys.dm_db_partition_stats.

Спасибо.

Комментарии:

1. blogs.msdn.com/b/martijnh/archive/2010/07/15/…

2. Посмотрите, что на самом деле сообщает вам sys.dm_db_partition_stats, а затем подумайте, можете ли вы сделать name = 'awt' с этой информацией.

Ответ №1:

Из документации для sys.dm_db_partition_stats :

Возвращает информацию о количестве страниц и строк для каждого раздела в текущей базе данных.

Это совокупная информация, которую SQL Server поддерживает, чтобы иметь возможность управлять структурами, используемыми для хранения пользовательских данных. В этом динамическом представлении управления нет информации о распределении значений в разделе. В других местах, чтобы он мог оптимизировать запросы, ведется статистика, но опять же это агрегированные данные (и не поддерживаются для каждого изменения данных).

Если вы хотите подсчитывать только строки, которые соответствуют какому-то определенному критерию, то вам придется их подсчитать. (Вы рассматривали возможность добавления индекса?)

Комментарии:

1. Привет, Ричард, ты имеешь в виду, что с помощью sys.dm_db_partition_stats я могу получить количество строк на основе некоторых критериев?

2. @nyinyithann Нет. Совершенно наоборот. Динамическое представление дает вам только общее количество всех строк. Для фильтрации вам нужно подсчитать строки, соответствующие этому фильтру.

Ответ №2:

Это определенно один из самых быстрых доступных методов, учитывая следующее.

  1. Сбор статистики займет значительное количество времени для больших таблиц

  2. Статистику необходимо обновлять, если вы хотите постоянно получать точный подсчет.

  3. Если вам требуется знать количество (оценочное и приблизительное число), это лучше всего.