Published on

May 4, 2015

Понимание концепций SQL Server: Подсчет строк в таблице

Подсчет количества строк в таблице может показаться простой задачей, но это может существенно повлиять на производительность вашего SQL Server. Каждый раз, когда вы выполняете запрос COUNT(*), SQL Server должен сканировать индекс или кучу, чтобы подсчитать количество строк и отправить его в ваше приложение. Это может привести к ненужным чтениям и блокировкам.

В предыдущей статье блога от Jes Schultz Borland и Aaron Bertrand они обсудили, почему использование COUNT(*) не является эффективным инструментом для этой задачи. Вместо этого они предложили альтернативные методы, такие как запрос метаданных таблицы или использование sys.partitions для получения количества строк.

Один из распространенных подходов – использовать следующий запрос:

SELECT SUM(p.rows)
FROM sys.partitions p
WHERE p.object_id = OBJECT_ID('MyTable')
    AND p.index_id IN (0,1); -- куча или кластеризованный индекс

Этот запрос получает количество строк, суммируя строки из таблицы sys.partitions. Хотя этот метод работает, он может быть довольно громоздким и подвержен ошибкам.

К счастью, существует более короткая версия этого запроса, которая полагается на системную функцию OBJECTPROPERTYEX:

SELECT OBJECTPROPERTYEX(OBJECT_ID('MyTable'),'cardinality')

Этот запрос получает количество строк напрямую из метаданных таблицы с использованием функции OBJECTPROPERTYEX. Он короче, легче запомнить и избегает ненужных объединений с другими системными таблицами.

При анализе производительности этого запроса было обнаружено, что он читает данные из системных таблиц sysallocunits и sysrowsets. Эту информацию было получено путем настройки сеанса Extended Events для захвата событий lock_acquired.

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

Наслаждайтесь использованием этого более короткого и эффективного подхода к подсчету строк в ваших таблицах SQL Server!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.