Указывается ли COUNT (*)?

Я хочу знать только ради любопытства, что Select Count(*) from SomeTableName также пересекает все строки базы данных, как и Select * from SomeTableName?

Или есть ли какое-либо другое поле подсчета, доступное в метаданных базы данных, которое обновляется каждый раз, когда строка добавляется или удаляется? И к этому полю обращается предыдущий запрос.

Также я хочу знать, какой из этих запросов быстрее и сколько?

Ответ 1

SELECT Count(*)
FROM   SomeTableName 

всегда будет считать все строки. Хотя (в отличие от SELECT *), он не должен читать все столбцы и может использовать самый узкий (нефильтрованный) индекс, доступный для этого.

В отличие от MySQL (движок MyISAM) он не извлекает значение из метаданных.

Значение rowcount доступно в метаданных и может быть получено из sys.partitions, но это никогда не используется для запросов COUNT и не всегда точно.