Каков эффективный запрос для подсчета строк таблицы в SQL Server 2008? - PullRequest
3 голосов
/ 05 декабря 2010

Какой эффективный запрос для подсчета строк таблицы в SQL Server 2008

Ответы [ 3 ]

5 голосов
/ 05 декабря 2010

Для получения точного ответа разумный способ получить точное число строк в таблице в нормализованной базе данных - выполнить:

select count(*) from table;

Для таблицы без индексов база данных выполнит полное сканирование таблицы. Если вы проиндексировали ненулевой столбец, база данных может использовать (возможно, намного меньший) индекс для разрешения вашего запроса.

Если вам нужно более быстрое решение, вы должны отслеживать количество строк в таблице, не прибегая к подсчету самих строк. Например, вы можете сделать это самостоятельно в другой таблице (как часть вашего тщательно разработанного API или с помощью триггеров и т. Д.) Или создав * индексированное представление для этой цели.

Однако, если вам нужно только приблизительное приближение, и очень важно, чтобы вы быстро получили ответ, другие показали способы сделать это, используя словарь (Джон, Мартин)

* Отказ от ответственности: я фактически не использовал индексированные представления в SQL-сервере, я просто читаю документацию и предполагаю, что они могут делать то же самое, что и материализованное представление в Oracle.

1 голос
/ 05 декабря 2010
SELECT COUNT(*) FROM table_name

будет иметь тривиальный план. Нет возможности оптимизировать это.

Вы можете использовать WITH NOLOCK для уменьшения накладных расходов блокировки, хотя существует риск некоторой неточности.

Или используйте

SELECT sum(rows)
FROM sys.partitions 
where object_id=object_id('foo') and index_id < 2

Однако это также не даст вам последовательного ответа.

1 голос
/ 05 декабря 2010
SELECT COUNT(*) FROM TableName

Это работает для вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...