sql >> Databáze >  >> RDS >> Sqlserver

Zjistěte, zda je tabulka rozdělena na SQL Server (T-SQL)

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 .


  1. MySQL SELECT LIKE nebo REGEXP pro shodu více slov v jednom záznamu

  2. nemůže přijímat out parametr z procedury oracle prováděné mybatis

  3. Jak nainstalovat MySQL 8 pomocí Workbench na Windows 10

  4. Doplňte řetězec úvodními nulami, aby měl v SQL Server 2008 3 znaky