Системное представление sys.partitions
имеет столбец «строки», который представляет собой общее количество строк в данном разделе. Для таблицы, которая не разделена (или имеет только один раздел в зависимости от того, как вы на нее смотрите), в этом столбце указывается количество строк в таблице.
Мне интересно, насколько точен этот столбец и могу ли я использовать его вместо a SELECT COUNT(1) FROM TableName
. Я провел несколько экспериментов, где создавал таблицу и добавлял несколько тысяч строк, удалял несколько сотен, добавлял еще несколько тысяч и т. Д., И счет всегда был мертвым. Однако у меня есть одна таблица с примерно 700 мил строк и несколько индексов. Строка sys.partitions
для кластеризованного индекса снова не работает, однако другие индексы показывают небольшие изменения (+ -20k).
Кто-нибудь знает, как рассчитывается этот ряд и насколько он точен?
источник
Ответы:
Books Online заявляет, что поле строк «указывает приблизительное количество строк в этом разделе». Поэтому я ожидаю, что он будет близким, но не на 100% точным, в 100% случаев.
Михаэль Зильберштейн приводит пример
sys.partitions
дикой неверности в « Из-за гвоздя» . Не сказать, что это обычное явление, но это возможно.sys.dm_db_index_physical_stats
содержитrecord_count
поле, которое представляется более точным, хотя следует помнить, что запуск DMV может привести к проблеме блокировки REDO, если вы запустите его на экземпляре, на котором размещена всегда читаемая вторичная реплика.Объяснение для
record_count
поля показывает следующую информацию:См. Также ответ Мартина Смита на аналогичный вопрос о переполнении стека.
источник