Rowcount ms sql: How to use @@ROWCOUNT in SQL Server

ROWCOUNT TOP / Хабр

mssqlhelp

Время на прочтение
3 мин

Количество просмотров 1.9K

Microsoft SQL Server *

Перевод

Автор оригинала:

Craig Freedman

Рассматривая планы запроса для INSERT, UPDATE или DELETE, в том числе те, которые демонстрировались в некоторых статьях ранее, можно заметить, что почти все такие планы включают оператора TOP. Например, следующий ниже сценарий с оператором UPDATE создает показательный для демонстрации этого план:

CREATE TABLE T (A INT) 
INSERT T VALUES (0) 
INSERT T VALUES (1) 
INSERT T VALUES (2)
UPDATE T SET A = A + 1
Rows  Executes
3      1      UPDATE [T] set [A] = [A]+@1
3      1        |--Table Update(OBJECT:([T]), SET:([T].[A] = [Expr1004]))
0      0             |--Compute Scalar(DEFINE:([Expr1004]=[T].[A]+[@1]))
3      1                  |--Top(ROWCOUNT est 0)
3      1                       |--Table Scan(OBJECT:([T]))
Что TOP делает прямо после просмотра таблицы?

Это ROWCOUNT TOP.  Он используется для реализации функциональности SET ROWCOUNT. «est 0» указывает на то что, когда запрос был скомпилирован, SET ROWCOUNT был равен нулю («est» — это сокращение от «estimate», хотя это значение во время компиляции не влияет на оптимизацию или выполнение запроса). Отметим, что значение 0 означает выборку или обновление всех строк. Поскольку во время выполнения SET ROWCOUNT также был равен 0, возвращаемый STATISTICS PROFILE результат, показывает, что все 3 строки были обновлены.

Теперь попробуйте следующее:

SET ROWCOUNT 1
UPDATE T SET A = A + 1
Rows  Executes
1      1      UPDATE [T] set [A] = [A]+@1
1      1        |--Table Update(OBJECT:([T]), SET:([T].[A] = [Expr1004]))
0      0             |--Compute Scalar(DEFINE:([Expr1004]=[T].[A]+[@1]))
1      1                  |--Top(ROWCOUNT est 0)
1      1                       |--Table Scan(OBJECT:([T]))

Хотя мы получаем тот же план (включая ROWCOUNT TOP с той же «estimate»), в этот раз SET ROWCOUNT был равен 1, поэтому при просмотре таблицы TOP вернул только одну строку, и потому была обновлена только одна строка.

Если сделать рекомпиляцию, то значение «estimate» изменяется:

SET ROWCOUNT 1
UPDATE T SET A = A + 1 OPTION (RECOMPILE)
Rows  Executes
1      1      UPDATE T SET A = A + 1 OPTION (RECOMPILE)
1      1        |--Table Update(OBJECT:([T]), SET:([T].[A] = [Expr1004]))
0      0             |--Compute Scalar(DEFINE:([Expr1004]=[T].[A]+(1)))
1      1                  |--Top(ROWCOUNT est 1)
1      1                       |--Table Scan(OBJECT:([T]))
Почему SQL Server не добавляет ROWCOUNT TOP к операторам выборки?

Например, следующий план запроса не содержит TOP, но возвращает только одну строку:

SET ROWCOUNT 1
SELECT * FROM T
Rows  Executes
1      1      SELECT * FROM T
1      1        |--Table Scan(OBJECT:([T]))

SQL Server реализует SET ROWCOUNT для операторов SELECT простым подсчётом, выбирая указанное количество строк из корня плана. Хотя это может работать и для тривиального плана с UPDATE, наподобие того, который был показан выше, это не будет работать для более сложных планов с UPDATE.  Например, если мы добавим в нашу таблицу уникальный индекс, план с UPDATE станет существенно сложнее:

CREATE UNIQUE INDEX TA ON T(A) 
UPDATE T SET A = A + 1
Rows  Executes
2      1      UPDATE [T] set [A] = [A]+@1
2      1        |--Index Update(OBJECT:([T].[TA]), SET:([Bmk10061024] = [Bmk1006],[A1025] = [T].[A]))
2      1             |--Collapse(GROUP BY:([T].[A]))
2      1                  |--Filter(WHERE:(NOT [Expr1021]))
2      1                       |--Sort(ORDER BY:([T].[A] ASC, [Act1023] ASC))
2      1                            |--Split
1      1                                 |--Table Update(OBJECT:([T]), SET:([T].[A] = [Expr1004]))
1      1                                      |--Compute Scalar(DEFINE:([Expr1021]=[Expr1021]))
0      0                                           |--Compute Scalar(DEFINE:([Expr1021]=CASE WHEN [Expr1005] THEN (1) ELSE (0) END))
0      0                                                |--Compute Scalar(DEFINE:([Expr1004]=[T].[A]+(1), [Expr1005]=CASE WHEN [T]. [A] = ([T].[A]+(1)) THEN (1) ELSE (0) END))
1      1                                                     |--Top(ROWCOUNT est 1)
1      1                                                          |--Table Scan(OBJECT:([T]))

Мы не будем в этой статье разбирать все детали последнего плана. Оставим это для последующих статей. Однако обратите внимание, что при изменении одной строки, корень этого плана возвращает две строки. Если бы было отсчитана одна строка от корня плана, это не дало бы правильного результата. Поместив ROWCOUNT TOP над просмотром таблицы, оптимизатор может гарантировать, что сервер обновит правильное количество строк независимо от сложности остальной части плана.

Теги:

  • sql server
  • Операторы в плане запроса

Хабы:

  • Microsoft SQL Server

SQL Server. Используйте TOP вместо SET ROWCOUNT

Перевод статьи — Use TOP instead of SET ROWCOUNT

Оба TOP and SET ROWCOUNT метода ограничения вывода строк имеют право на существование, но они сильно отличаются. TOP ограничивает одну инструкцию T-SQL, в то время как SET ROWCOUNT ограничивает все инструкции в текущем подключении.

Если у вас несколько запросов, в каждом из которых вы хотите вернуть только по 10 строк, то кажется, что лучше использовать SET ROWCOUNT:

Transact-SQL

SET ROWCOUNT 10

SELECT * FROM HumanResources.Department
SELECT * FROM HumanResources.Employee
SELECT * FROM HumanResources.EmployeeDepartmentHistory
SELECT * FROM HumanResources.EmployeePayHistory
SELECT * FROM HumanResources.JobCandidate
SELECT * FROM HumanResources.Shift

SET ROWCOUNT 0


1

2

3

4

5

6

7

8

9

10

SET ROWCOUNT 10

SELECT * FROM HumanResources.Department

SELECT * FROM HumanResources.Employee

SELECT * FROM HumanResources.EmployeeDepartmentHistory

SELECT * FROM HumanResources. EmployeePayHistory

SELECT * FROM HumanResources.JobCandidate

SELECT * FROM HumanResources.Shift

SET ROWCOUNT 0

против

Transact-SQL

SELECT TOP 10 * FROM HumanResources.Department
SELECT TOP 10 * FROM HumanResources.Employee
SELECT TOP 10 * FROM HumanResources.EmployeeDepartmentHistory
SELECT TOP 10 * FROM HumanResources.EmployeePayHistory
SELECT TOP 10 * FROM HumanResources.JobCandidate
SELECT TOP 10 * FROM HumanResources.Shift


1

2

3

4

5

6

SELECT TOP 10 * FROM HumanResources.Department

SELECT TOP 10 * FROM HumanResources.Employee

SELECT TOP 10 * FROM HumanResources.EmployeeDepartmentHistory

SELECT TOP 10 * FROM HumanResources.EmployeePayHistory

SELECT TOP 10 * FROM HumanResources.JobCandidate

SELECT TOP 10 * FROM HumanResources.Shift

Так почему же я рекомендую использовать TOP вместо SET ROWCOUNT? В первую очередь по той причине, что TOP более предсказуемый.  SET ROWCOUNT ограничивает ВСЕ запросы, включая триггеры.

Вот пример с триггером на тестовой БД AdventureWorks2008. Я создаю триггер, который удаляет данные из связанных таблиц.

Transact-SQL

— Create temporary tables to test with to avoid the existing foreign keys
— Create a temp SalesOrderHeader table
SELECT TOP 20 * INTO TempSalesOrderHeader FROM Sales.SalesOrderHeader

— Create a temp SalesOrderDetail table
SELECT * INTO TempSalesOrderDetail
FROM Sales.SalesOrderDetail
WHERE SalesOrderId IN (SELECT SalesOrderId FROM TempSalesOrderHeader)
GO

— Create Trigger
CREATE TRIGGER dbo.tr_dl_SalesOrderDetail
ON TempSalesOrderHeader
AFTER DELETE AS
BEGIN
DELETE FROM TempSalesOrderDetail
FROM TempSalesOrderDetail
JOIN deleted
ON TempSalesOrderDetail.SalesOrderId =
deleted.SalesOrderId
END
GO


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

— Create temporary tables to test with to avoid the existing foreign keys

— Create a temp SalesOrderHeader table

SELECT TOP 20 * INTO TempSalesOrderHeader FROM Sales. SalesOrderHeader

 

— Create a temp SalesOrderDetail table

SELECT * INTO TempSalesOrderDetail

FROM Sales.SalesOrderDetail

WHERE SalesOrderId IN (SELECT SalesOrderId FROM TempSalesOrderHeader)

GO

 

— Create Trigger

CREATE TRIGGER dbo.tr_dl_SalesOrderDetail

ON TempSalesOrderHeader

AFTER DELETE AS

BEGIN

    DELETE FROM TempSalesOrderDetail

    FROM TempSalesOrderDetail

    JOIN deleted

        ON TempSalesOrderDetail.SalesOrderId =

            deleted.SalesOrderId

END

GO

Transact-SQL

— Run my delete using SET ROWCOUNT
SET ROWCOUNT 10

DELETE FROM TempSalesOrderHeader

SET ROWCOUNT 0
GO


1

2

3

4

5

6

7

— Run my delete using SET ROWCOUNT

SET ROWCOUNT 10

DELETE FROM TempSalesOrderHeader

SET ROWCOUNT 0

GO

Transact-SQL

— Show orphaned OrderDetail rows
SELECT *
FROM TempSalesOrderDetail
WHERE SalesOrderId NOT IN (SELECT SalesOrderId FROM TempSalesOrderHeader)
GO



— Show orphaned OrderDetail rows

SELECT *

FROM TempSalesOrderDetail

WHERE SalesOrderId NOT IN (SELECT SalesOrderId FROM TempSalesOrderHeader)

GO

Transact-SQL

— Cleanup code
DROP TABLE TempSalesOrderHeader
DROP TABLE TempSalesOrderDetail



— Cleanup code

DROP TABLE TempSalesOrderHeader

DROP TABLE TempSalesOrderDetail

Благодаря SET ROWCOUNT из таблицы TempSalesOrderHeader было удалено только 10 строк, как и ожидалось. Но из таблицы TempSalesOrderDetail было так же удалено 10 строк, что противоречит нашей логике. Если бы я использовал TOP, были бы удалены все 109 строк из TempSalesOrderDetail. Будьте осторожны!

Сейчас, в BOL есть предупреждение, что SET ROWCOUNT не будет поддерживаться для команд DELETE, INSERT и UPDATE. Если вы используете SET ROWCOUNT для удаления и понимаете как оно работает, рекомендуется поменять его на TOP, чтобы избежать проблем в будущем.

Оптимизация

Ещё хотелось бы поделиться вырезкой из BOL:

Для ограничения числа возвращаемых строк пользуйтесь TOP (или OFFSET и FETCH), а не SET ROWCOUNT. Эти методы предпочтительнее, чем SET ROWCOUNT, по следующим причинам:

  • Как часть инструкции SELECT, оптимизатор запросов может принимать значение выражение в предложениях TOP или FETCH во время оптимизации запроса. Поскольку SET ROWCOUNT используется вне инструкции, выполняющей запрос, его значение не может быть учтено при создании плана запроса.

Это означает, что оптимайзер может выбрать план для 100 миллионов строк, вместо того, чтобы построить оптимальный для 100, что может существенно изменить время его выполнения.

Личный опыт

Если быть честным, я часто использовал SET ROWCOUNT в своей практике, но после изучения вопроса, я стал делать это реже.

Запись опубликована в рубрике Оптимизация с метками performance. Добавьте в закладки постоянную ссылку.

УСТАНОВИТЬ ROWCOUNT (Transact-SQL) — SQL Server

Редактировать

Твиттер

LinkedIn

Фейсбук

Электронная почта

  • Статья

Применяется к: SQL Server База данных SQL Azure Azure SQL Управляемый экземпляр Azure Synapse Analytics Analytics Platform System (PDW)

Приводит к тому, что SQL Server прекращает обработку запроса после возврата указанного количества строк.

Соглашения о синтаксисе Transact-SQL

Синтаксис

 SET ROWCOUNT { число | @number_var }
 

Примечание

Чтобы просмотреть синтаксис Transact-SQL для SQL Server 2014 и более ранних версий, см. документацию по предыдущим версиям.

Аргументы

номер | @ number_var
Целое число строк, которые необходимо обработать перед остановкой конкретного запроса.

Важно

Использование SET ROWCOUNT не повлияет на инструкции DELETE, INSERT и UPDATE в будущем выпуске SQL Server. Избегайте использования SET ROWCOUNT с операторами DELETE, INSERT и UPDATE в новых разработках и планируйте модифицировать приложения, которые в настоящее время его используют. Для аналогичного поведения используйте синтаксис TOP. Дополнительные сведения см. в разделе TOP (Transact-SQL).

Чтобы отключить этот параметр, чтобы возвращались все строки, укажите SET ROWCOUNT 0.

Установка параметра SET ROWCOUNT приводит к остановке обработки большинства инструкций Transact-SQL, когда на них влияет указанное количество строк. Сюда входят триггеры. Параметр ROWCOUNT не влияет на динамические курсоры, но ограничивает набор строк наборов ключей и нечувствительных курсоров. Эту опцию следует использовать с осторожностью.

SET ROWCOUNT переопределяет ключевое слово TOP оператора SELECT, если значение rowcount меньше.

Параметр SET ROWCOUNT устанавливается во время выполнения или выполнения, а не во время синтаксического анализа.

Разрешения

Требуется членство в роли public.

Примеры

SET ROWCOUNT останавливает обработку после указанного количества строк. В следующем примере обратите внимание, что более 500 строк соответствуют критериям Количество меньше, чем 300 . Однако после применения SET ROWCOUNT видно, что не все строки были возвращены.

 ИСПОЛЬЗОВАТЬ AdventureWorks2012;
ИДТИ
ВЫБЕРИТЕ количество (*) КАК количество
ОТ Production.ProductInventory
ГДЕ Количество < 300;
ИДТИ
 

Вот набор результатов.

 Количество
-----------
537
(затронуты 1 ряд)
 

Теперь задайте для ROWCOUNT значение 4 и верните все строки, чтобы продемонстрировать, что возвращаются только 4 строки.

 УСТАНОВИТЬ СТРОКА 4;
ВЫБИРАТЬ *
ОТ Production.ProductInventory
ГДЕ Количество < 300;
ИДТИ
  
-- (затронуты 4 строки)
 

Примеры: Azure Synapse Analytics and Analytics Platform System (PDW)

SET ROWCOUNT останавливает обработку после указанного количества строк. В следующем примере обратите внимание, что более 20 строк соответствуют критериям 9.0060 AccountType = 'Активы' . Однако после применения SET ROWCOUNT видно, что не все строки были возвращены.

 -- Использует AdventureWorks
  
УСТАНОВИТЬ СЧЕТЧИК 5;
ВЫБЕРИТЕ * ОТ [dbo].[DimAccount]
ГДЕ AccountType = 'Активы';
 

Чтобы вернуть все строки, установите для ROWCOUNT значение 0.

 -- Использует AdventureWorks
  
УСТАНОВИТЬ СЧЕТЧИК 0;
ВЫБЕРИТЕ * ОТ [dbo].[DimAccount]
ГДЕ AccountType = 'Активы';
 

См. также

Операторы SET (Transact-SQL)

4 способа подсчета строк в таблице SQL Server с плюсами и минусами

Автор Нисарг Упадхьяй• 23 марта 2021 г.
11:36•
Разработка баз данных, Выписки, Таблицы

ГлавнаяРазработка баз данных, Заявления, Таблицы4 способа подсчета строк в таблице SQL Server с плюсами и минусами

Недавно я работал над проектом по улучшению производительности базы данных. Одна хранимая процедура вызывала проблемы. В своем коде запрос заполняет количество строк и сохраняет значение в локальной переменной. Этот запрос сканировал большую таблицу. За счет этого использование ресурсов стало значительно выше. Чтобы решить эту проблему, мы удалили ошибочный код и использовали представления каталога SQL Server для создания количества строк таблицы.

Существуют различные способы подсчета количества строк в таблице SQL Server. В этой статье мы опишем их, чтобы вы всегда могли выбрать правильный способ сделать это.

Мы можем получить количество строк таблицы любым из следующих способов:

  1. Используйте функцию COUNT().
  2. Объединение представлений каталога SQL Server.
  3. Использование хранимой процедуры sp_spaceused .
  4. Использование студии управления SQL Server.

Давайте копнем глубже.

Получить количество строк, используя COUNT(*) или Count(1)

Мы можем использовать функцию COUNT(*) или COUNT(1) – результаты, полученные этими двумя функциями, идентичны.

Чтобы получить количество строк, давайте сначала запустим запрос, используя COUNT(*). В демонстрационных целях я установил значение STATISTICS IO как ON.

 ЕГЭ широкий мир импортеров
идти
ВЫБЕРИТЕ количество (*)
ОТ tblcustomer
идти
 

Вывод: 

Статистика ввода-вывода:

 Таблица 'tblCustomer'. Количество сканирований 1, логических чтений 691, физическое чтение 315, сервер страниц читает 0, упреждающее чтение 276, упреждающее чтение сервера страниц 0, логическое чтение большого объекта 0, физическое чтение большого объекта 0, чтение сервером многостраничной страницы 0, чтение большого объекта упреждающим чтением 0, страница большого объекта упреждающее чтение сервера 0.  

Как видите, SQL Server должен выполнить 691 логическое чтение, чтобы получить удовлетворительный результат.

Теперь давайте запустим запрос, используя COUNT(1):

 USE wideworldimporters
идти
ВЫБЕРИТЕ Количество(1)
ОТ tblcustomer
идти
 

Выход:

Статистика ввода-вывода:

 Таблица 'tblCustomer'. Количество сканирований 1, логических операций чтения 691, физических операций чтения 687, операций чтения сервером страниц 0, операций упреждающего чтения 687, операций упреждающего чтения сервером страниц 0, логических операций чтения 0 объектов, физических операций чтения 0 объектов, операций чтения сервером страниц 0 объектов, операций чтения объектов 0 упреждающее чтение 0, упреждающее чтение сервера больших страниц равно 0. 

Опять же, SQL Server должен выполнить 691 логическое чтение, чтобы удовлетворить результат.

Следует отметить, что существует мнение, что функция Count (1) работает быстрее, чем функция Count (*). Однако, как вы можете видеть в приведенных выше примерах, наборы результатов и статистика ввода-вывода одинаковы. Таким образом, вы можете использовать любой метод для создания количества строк в таблицах.

Плюсы:

Функция COUNT заполняет точное количество строк из таблицы.

Минусы:

Когда вы выполняете функцию COUNT, она блокирует таблицу. Другие запросы, обращающиеся к таблице, должны ждать, пока не будет сгенерирован результат. Если вы работаете в загруженной системе с таблицей, содержащей миллионы строк, вам лучше не запускать функцию COUNT в рабочее время, если только вам не нужно заполнять точное количество строк таблицы.

Объединение представлений каталога SQL Server

Мы можем использовать представления каталога SQL Server со следующими представлениями динамического управления:

  1. sys.tables — заполняет список таблиц.
  2. sys. indexes – заполняет список индексов таблицы.
  3. sys.partitions — заполняет строки каждого раздела.

Чтобы получить количество строк, запустите следующий скрипт:

 SELECT a.NAME,
       c.ИМЯ,
       Сумма (b.rows)
ИЗ sys.tables
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ sys.partitions b
               ПО a.object_id = b.object_id
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ sys.indexes c
               ВКЛ b.index_id = c.index_id
                  И b.object_id = c.object_id
ГДЕ a.object_id = Object_id('tblCustomer')
       И c.index_id < 2
 

Вывод:

Запрос заполняет имя таблицы , имя индекса, и общее количество строк во всех разделах.

Теперь давайте рассмотрим статистику операций ввода-вывода:

 Таблица 'syssingleobjrefs'. Счетчик сканирований 3, логических операций чтения 6, физических операций чтения 0, операций чтения сервером страниц 0, операций упреждающего чтения 0, операций упреждающего чтения сервером страниц 0, логических операций чтения 0 объектов, физических операций чтения 0 объектов, операций чтения сервером страниц 0 объектов, операций чтения объектов 0 впереди считывается 0, упреждающее чтение сервера больших страниц читается 0. 
Таблица «sysidxstats». Количество сканирований 1, логических операций чтения 6, физических операций чтения 0, операций чтения сервером страниц 0, операций упреждающего чтения 0, операций упреждающего чтения сервером страниц 0, логических операций чтения 0 объектов, физических операций чтения 0 объектов, операций чтения сервером страниц 0 объектов, операций чтения объектов 0 впереди считывается 0, упреждающее чтение сервера больших страниц читается 0.
Таблица «sysschobjs». Число сканирований 0, логических операций чтения 4, физических операций чтения 0, операций чтения сервером страниц 0, операций упреждающего чтения 0, операций упреждающего чтения сервером страниц 0, логических операций чтения 0 объектов, физических операций чтения 0 объектов, операций чтения сервером страниц 0 объектов, операций чтения объектов 0 впереди считывается 0, упреждающее чтение сервера больших страниц читается 0.
Стол «Рабочий стол». Количество сканирований 0, логических операций чтения 0, физических операций чтения 0, операций чтения сервером страниц 0, операций упреждающего чтения 0, операций упреждающего чтения сервером страниц 0, логических операций чтения 0 объектов, физических операций чтения 0 объектов, операций чтения сервером страниц 0 объектов, операций чтения объектов 0 впереди считывается 0, упреждающее чтение сервера больших страниц читается 0. 
Стол «Рабочий стол». Количество сканирований 0, логических операций чтения 0, физических операций чтения 0, операций чтения сервером страниц 0, операций упреждающего чтения 0, операций упреждающего чтения сервером страниц 0, логических операций чтения 0 объектов, физических операций чтения 0 объектов, операций чтения сервером страниц 0 объектов, операций чтения объектов 0 впереди считывается 0, упреждающее чтение сервера больших страниц читается 0.
Таблица «sysrowsets». Счетчик сканирований 2, логических операций чтения 14, физических операций чтения 0, операций чтения сервером страниц 0, операций упреждающего чтения 0, операций упреждающего чтения сервером страниц 0, логических операций чтения 0 объектов, физических операций чтения 0 объектов, операций чтения сервером страниц 0 объектов, операций чтения объектов 0 впереди считывается 0, упреждающее чтение сервера больших страниц читается 0.
 

Как видите, запрос выполняет только 30 логических операций чтения.

Плюсы:

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

Минусы:

Метод заполняет приблизительное количество строк. В документации Microsoft по sys.partitions вы можете увидеть, что столбец rows содержит приблизительное количество строк для разделов.

Таким образом, если вы ищете запрос, который выдает результат быстрее, чем функция COUNT, вы можете использовать эту. Однако результат может быть неточным.

Use sp_spaceused

Процедура sp_spaceused наряду с подсчетом строк предоставляет следующие сведения:

  1. Name – имя таблицы 017 Rows – Количество строк в таблице.
  2. Зарезервировано – общее зарезервированное место для таблицы.
  3. Данные – общее пространство, используемое таблицей.
  4. Index_size – общее пространство, используемое индексом.
  5. Неиспользуемое – общее зарезервированное пространство для таблицы, которая не используется.

Синтаксис:

 EXEC Sp_spaceused 'database_name.schema_name.table_name' 

Запрос:

 EXEC Sp_spaceused 'WideWorldImportors.dbo.tblCustomer' 

9001 6 Вывод:

Использовать SQL Server Management Studio

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

Открыть Студия управления SQL Server > Подключиться к экземпляру базы данных > Развернуть таблицы > Щелкните правой кнопкой мыши tblCustomer > Свойства

В таблице Свойства 9003 6 окно, нажмите на Хранилище . Справа вы увидите значение Row count :

Другой вариант получения количества строк в таблице поставляется с надстройкой SQL Complete SSMS.