Мы можем просто классифицировать таблицы на два типа.
- Кластерная таблица (таблицы с кластерным индексом)
- Таблицы кучи (
Таблицы, не имеющие кластерного индекса)
В SQL Server все таблицы делятся на partitions
. Для каждой таблицы будет хотя бы один раздел.
В sys.partitions
существует одна строка для каждого partition
всех таблиц.
Записи в sys.partitions
содержат столбец для количество строк в этом разделе соответствующей таблицы.
Поскольку все таблицы в SQL Server содержат как минимум один раздел, мы можем получить информацию о количестве строк в таблице из sys.partitions
.
SELECT
OBJECT_NAME(T.OBJECT_ID) AS TABLE_NAME,
SUM(P.ROWS) AS TOTAL_ROWS
FROM
SYS.TABLES T
INNER JOIN
SYS.PARTITIONS P
ON T.OBJECT_ID = P.OBJECT_ID
WHERE
P.INDEX_ID IN (0,1)
GROUP BY
T.OBJECT_ID
HAVING
SUM(P.ROWS) = 0
Принимая сумму строк в разных разделах, мы учитываем index_id
(0,1)
index_id = 0 for Heap
index_id = 1 for Clustered index
index_id > 1 are for nonclustered index.
Таблица может иметь либо один кластерный индекс, либо ни одного.
Но таблица может иметь несколько некластеризованных индексов.
Поэтому мы не можем использовать index_id
некластеризованных индексов при суммировании строк.
- Таблицы кучи будут иметь
index_id = 0
- Кластерные таблицы будут иметь
index_id = 1