Все быстрее, чем счет (1) от Tablea, чтобы найти счетчики строки?
-
04-10-2019 - |
Вопрос
Есть ли что-нибудь, из которой мы можем быстрее получить нет. рядов в таблице вместо того, чтобы использовать счет (1). Далее есть два случая:
а) Когда мы хотим получить нет. рядов в таблице.
б) Когда мы просто хотим знать, есть ли хотя бы один ряд.
Заранее спасибо.
Решение
а) Вы можете получить счетчики строки в таблицах от системных таблиц, 1 пример в соответствии с имеем URI Блог пост здесь.
б) Я всегда использовал существую:
IF EXISTS(SELECT * FROM YourTable)
Другие советы
б) Когда мы просто хотим, знаю, если есть хотя бы один ряд.
SELECT TOP 1 myField
FROM myTable [WHERE .....]
Знать счет всех строк в таблице, не сканируя их, вы можете использовать
select SUM(row_count) AS row_count
from sys.dm_db_partition_stats
where object_id = object_id('dbo.tblName')
and index_id < 2
Я не уверен, есть ли какие-нибудь предостережения с таким подходом. (Предположительно, это может включать в себя счет для не преданных записей или не включает изменения, выполненные в пределах вашей текущей транзакции)
б) Linq-to-sql генерирует
EXISTS (SELECT NULL FROM Table....)
а) Нет
б) вы можете использовать exists
Функция, которая проверяет только, есть ли результат и на самом деле не получает результат.
Есть этот подход, используя SysObjects и Sysindexes:
Подсчет строк для всех таблиц сразу
Это работало хорошо для меня в прошлом.