Pokud potřebujete zjistit, zda byla tabulka rozdělena na SQL Server, můžete spustit spojení proti sys.tables
, sys.indexes
a sys.partition_schemes
zhlédnutí.
Příklad
Zde je příklad k demonstraci.
SELECT
t.name AS [Table],
i.name AS [Index],
i.type_desc,
i.is_primary_key,
ps.name AS [Partition Scheme]
FROM sys.tables t
INNER JOIN sys.indexes i
ON t.object_id = i.object_id
AND i.type IN (0,1)
INNER JOIN sys.partition_schemes ps
ON i.data_space_id = ps.data_space_id
WHERE t.name = 'Movies';
Výsledek:
+---------+------------------------------+-------------+------------------+-----------------------+ | Table | Index | type_desc | is_primary_key | Partition Scheme | |---------+------------------------------+-------------+------------------+-----------------------| | Movies | PK__Movies__4BD2941AD44D2FCF | CLUSTERED | 1 | MoviesPartitionScheme | +---------+------------------------------+-------------+------------------+-----------------------+
Zde se opět používá vertikální výstup (abyste nemuseli rolovat do stran):
Table | Movies Index | PK__Movies__4BD2941AD44D2FCF type_desc | CLUSTERED is_primary_key | 1 Partition Scheme | MoviesPartitionScheme
Vracím pouze malou podmnožinu skutečných sloupců, ale klidně vraťte, které sloupce vás zajímají.
Také můžete odstranit poslední řádek a vrátit všechny rozdělené tabulky.
SELECT
t.name AS [Table],
i.name AS [Index],
i.type_desc,
i.is_primary_key,
ps.name AS [Partition Scheme]
FROM sys.tables t
INNER JOIN sys.indexes i
ON t.object_id = i.object_id
AND i.type IN (0,1)
INNER JOIN sys.partition_schemes ps
ON i.data_space_id = ps.data_space_id;
Výsledek:
+---------+------------------------------+-------------+------------------+-----------------------+ | Table | Index | type_desc | is_primary_key | Partition Scheme | |---------+------------------------------+-------------+------------------+-----------------------| | Movies | PK__Movies__4BD2941AD44D2FCF | CLUSTERED | 1 | MoviesPartitionScheme | +---------+------------------------------+-------------+------------------+-----------------------+
V mém případě je v databázi pouze jedna dělená tabulka.
Aby bylo jasno, vrací se pouze tabulky, které byly explicitně rozděleny.
Vraťte oddíly
Můžete se také dotazovat na jiná zobrazení, jako je sys.partitions
a sys.dm_db_partition_stats
vrátit seznam oddílů pro každou tabulku.
Všimněte si, že oba tyto pohledy také vrátí tabulky, které nebyly explicitně rozděleny (tj. mají pouze jeden oddíl). Na SQL Serveru mají tabulky a pohledy, které nebyly explicitně rozděleny, stále oddíl (partition_number
=1).
Zde je příklad sys.dm_db_partition_stats
:
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');
Výsledek:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+-------------+
Zde je příklad, kdy vrátím informace o oddílu pro tabulku bez oddílů.
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Cats');
Výsledek:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 3 | +--------------------+-------------+
Jak již bylo zmíněno, stále má jeden oddíl a jeho partition_number
je 1
.