sql >> Database teknologi >  >> RDS >> Sqlserver

Find ud af, om en tabel er opdelt i SQL Server (T-SQL)

Hvis du har brug for at finde ud af, om en tabel er blevet partitioneret i SQL Server, kan du køre en join mod sys.tables , sys.indexes , og sys.partition_schemes visninger.

Eksempel

Her er et eksempel til at demonstrere.

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 |
+---------+------------------------------+-------------+------------------+-----------------------+

Her bruger den igen lodret output (så du ikke behøver at scrolle sidelæns):

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

Jeg returnerer kun en lille delmængde af de faktiske kolonner, men du er velkommen til at returnere de kolonner, der interesserer dig.

Du kan også fjerne den sidste linje for at returnere alle partitionerede 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 mit tilfælde er der kun én opdelt tabel i databasen.

Bare for at være klar, returnerer dette kun tabeller, der eksplicit er blevet partitioneret.

Returner partitionerne

Du kan også forespørge på andre visninger, såsom sys.partitions og sys.dm_db_partition_stats for at returnere en liste over partitionerne for hver tabel.

Bemærk, at begge disse visninger også returnerer tabeller, der ikke eksplicit er blevet opdelt (dvs. de har kun én partition). I SQL Server har tabeller og visninger, der ikke eksplicit er blevet partitioneret, stadig en partition (partition_number =1).

Her er et eksempel 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           |
+--------------------+-------------+

Her er et eksempel, hvor jeg returnerer partitionsoplysningerne for en ikke-opdelt tabel.

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ævnt har den stadig én partition og dens partition_number er 1 .


  1. MS-Access Class Module og VBA

  2. Hvordan bruger man CASE Statement i MySQL?

  3. Udforskning af SQL Server 2016 Query Store GUI

  4. Hvor effektiv er din ProxySQL-node?