Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dowiedz się, czy tabela jest partycjonowana w SQL Server (T-SQL)

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 .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wartości NULL wewnątrz klauzuli NOT IN

  2. Co jest szybsze COALESCE CZY ISNULL?

  3. Jak konwertować między formatami dat w SQL Server za pomocą CAST()

  4. Indeksy oparte na funkcjach w SQL Server

  5. Błąd serwera SQL:ciąg lub dane binarne zostaną obcięte