Что-нибудь быстрее, чем count (1) из таблицы A, чтобы найти количество строк? - PullRequest
2 голосов
/ 21 сентября 2010

Есть ли вещь, из которой мы можем быстрее получить нет. строк в таблице вместо использования count (1). Далее есть два случая:

а) когда мы хотим получить нет. строк в таблице.

b) когда мы просто хотим узнать, есть ли хотя бы одна строка.

Заранее спасибо.

Ответы [ 6 ]

2 голосов
/ 21 сентября 2010

Чтобы узнать количество всех строк в таблице без их сканирования, вы можете использовать

select SUM(row_count) AS row_count
from sys.dm_db_partition_stats
where object_id = object_id('dbo.tblName')
    and index_id < 2

Я не уверен, есть ли какие-либо предостережения с таким подходом.(Предположительно, он может включать в себя количество необязательных записей или не включать изменения, внесенные в текущую транзакцию)

2 голосов
/ 21 сентября 2010

а) Вы можете получить количество строк таблицы из системных таблиц, 1 пример - согласно сообщению в блоге Ури Диманта .

б) Я бы всегда использовал EXISTS:

IF EXISTS(SELECT * FROM YourTable)
2 голосов
/ 21 сентября 2010

б) когда мы просто хотим, чтобы тот знал, есть ли хотя бы одна строка.

SELECT TOP 1 myField FROM myTable [WHERE .....]

1 голос
/ 21 сентября 2010

а) Нет.

b) Вы можете использовать функцию exists, которая только проверяет, есть ли результат, и фактически не получает результат.

1 голос
/ 21 сентября 2010

б) Linq-to-Sql генерирует

EXISTS (SELECT NULL FROM Table....)
0 голосов
/ 21 сентября 2010

Существует такой подход с использованием sysobjects и sysindexes:

Подсчет строк для всех таблиц одновременно

В прошлом это работало хорошо для меня.

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