sql >> Databasteknik >  >> RDS >> Sqlserver

Ta reda på om en tabell är partitionerad i SQL Server (T-SQL)

Om du behöver ta reda på om en tabell har partitionerats i SQL Server kan du köra en join mot sys.tables , sys.indexes och sys.partition_schemes visningar.

Exempel

Här är ett exempel att visa.

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';

Resultat:

+---------+------------------------------+-------------+------------------+-----------------------+
| Table   | Index                        | type_desc   | is_primary_key   | Partition Scheme      |
|---------+------------------------------+-------------+------------------+-----------------------|
| Movies  | PK__Movies__4BD2941AD44D2FCF | CLUSTERED   | 1                | MoviesPartitionScheme |
+---------+------------------------------+-------------+------------------+-----------------------+

Här använder den återigen vertikal utmatning (så att du inte behöver rulla i sidled):

Table            | Movies
Index            | PK__Movies__4BD2941AD44D2FCF
type_desc        | CLUSTERED
is_primary_key   | 1
Partition Scheme | MoviesPartitionScheme

Jag returnerar bara en liten delmängd av de faktiska kolumnerna, men returnera gärna de kolumner som intresserar dig.

Du kan också ta bort den sista raden för att returnera alla partitionerade tabeller.

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;

Resultat:

+---------+------------------------------+-------------+------------------+-----------------------+
| Table   | Index                        | type_desc   | is_primary_key   | Partition Scheme      |
|---------+------------------------------+-------------+------------------+-----------------------|
| Movies  | PK__Movies__4BD2941AD44D2FCF | CLUSTERED   | 1                | MoviesPartitionScheme |
+---------+------------------------------+-------------+------------------+-----------------------+

I mitt fall finns det bara en partitionerad tabell i databasen.

Bara för att vara tydlig, returnerar detta bara tabeller som explicit har partitionerats.

Återställ partitionerna

Du kan också fråga efter andra vyer, såsom sys.partitions och sys.dm_db_partition_stats för att returnera en lista över partitionerna för varje tabell.

Observera att båda dessa vyer också returnerar tabeller som inte explicit har partitionerats (dvs. de har bara en partition). I SQL Server har tabeller och vyer som inte explicit har partitionerats fortfarande en partition (partition_number =1).

Här är ett exempel på sys.dm_db_partition_stats :

SELECT 
    partition_number,
    row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');

Resultat:

+--------------------+-------------+
| partition_number   | row_count   |
|--------------------+-------------|
| 1                  | 0           |
| 2                  | 100         |
| 3                  | 3979        |
| 4                  | 0           |
+--------------------+-------------+

Här är ett exempel där jag returnerar partitionsinformationen för en icke-partitionerad tabell.

SELECT 
    partition_number,
    row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Cats');

Resultat:

+--------------------+-------------+
| partition_number   | row_count   |
|--------------------+-------------|
| 1                  | 3           |
+--------------------+-------------+

Som nämnts har den fortfarande en partition och dess partition_number är 1 .


  1. jag har en Android-app som hämtar data från sqlite och visar data i BaseAdapter .. vad är det bästa sättet ??

  2. Vad är nytt i MariaDB Cluster 10.4

  3. 🆕 SQL Server 2022 Första titt - Topp 5 nya funktioner (Bonus 5 funktioner)

  4. Flera frågor körs i java i en enda sats