Jeśli chcesz dowiedzieć się, czy tabela została podzielona na partycje w SQL Server, możesz uruchomić sprzężenie z sys.tables
, sys.indexes
i sys.partition_schemes
widoki.
Przykład
Oto przykład do zademonstrowania.
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';
Wynik:
+---------+-------------------------------+----- --------+-------------------+---------------------- -+| Tabela | Indeks | type_desc | is_primary_key | Schemat partycji ||---------+-----------------------------------+----- --------+-------------------+---------------------- -|| Filmy | PK__Filmy__4BD2941AD44D2FCF | KLASTRA | 1 | MoviesPartitionScheme |+----------+----------------------------------+------ -------+-------------------+----------------------- +
Tutaj znowu używa pionowego wyjścia (abyś nie musiał przewijać na boki):
Tabela | Indeks filmów | PK__Filmy__4BD2941AD44D2FCFtype_desc | CLUSTEREDis_primary_key | 1Schemat partycji | MoviesPartitionScheme
Zwracam tylko mały podzbiór rzeczywistych kolumn, ale możesz zwrócić te kolumny, które Cię interesują.
Możesz także usunąć ostatnią linię, aby zwrócić wszystkie podzielone na partycje tabele.
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;
Wynik:
+---------+-------------------------------+----- --------+-------------------+---------------------- -+| Tabela | Indeks | type_desc | is_primary_key | Schemat partycji ||---------+-----------------------------------+----- --------+-------------------+---------------------- -|| Filmy | PK__Filmy__4BD2941AD44D2FCF | KLASTRA | 1 | MoviesPartitionScheme |+---------+-------------------------------+------ -------+-------------------+----------------------- +
W moim przypadku w bazie danych jest tylko jedna podzielona na partycje tabela.
Dla jasności, zwraca to tylko tabele, które zostały jawnie podzielone na partycje.
Zwróć partycje
Możesz także wysyłać zapytania do innych widoków, takich jak sys.partitions
i sys.dm_db_partition_stats
aby zwrócić listę partycji dla każdej tabeli.
Zauważ, że oba te widoki zwrócą również tabele, które nie zostały jawnie podzielone na partycje (tj. mają tylko jedną partycję). W SQL Server tabele i widoki, które nie zostały jawnie podzielone na partycje, nadal mają partycję (partition_number
=1).
Oto przykład sys.dm_db_partition_stats
:
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');
Wynik:
+---------------------+--------------+| numer_partycji | liczba_wierszów ||--------------------+-------------||| 1 | 0 || 2 | 100 || 3 | 3979 || 4 | 0 |+---------------------+-------------+
Oto przykład, w którym zwracam informacje o partycjach dla tabeli niepartycjonowanej.
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Cats');
Wynik:
+---------------------+--------------+| numer_partycji | liczba_wierszów ||--------------------+-------------||| 1 | 3 |+---------------------+--------------+
Jak wspomniano, nadal ma jedną partycję i jej partition_number
to 1
.