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

3 způsoby, jak vrátit počet řádků v každém oddílu na serveru SQL (T-SQL)

Pokud jste dříve vytvořili rozdělenou tabulku na SQL Server a nyní chcete vědět, kolik řádků je uloženo v každém oddílu, můžete použít tři dotazy.

Zejména můžete:

  • Zeptejte se sys.dm_db_partition_stats zobrazit
  • Dotaz na sys.partitions zobrazit
  • Použijte $PARTITION funkce v dotazu

Níže jsou uvedeny příklady všech tří.

sys.dm_db_partition_stats

sys.dm_db_partition_stats zobrazení dynamické správy systému vrací informace o počtu stránek a řádků pro každý oddíl v aktuální databázi.

Zde je příklad vrácení počtu řádků rozdělené tabulky s názvem Movies .

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

V tomto případě jsou první a poslední oddíly prázdné (jak doporučuje společnost Microsoft).

sys.partitions

Soubor sys.partitions pohled systémového katalogu obsahuje řádek pro každou oblast všech tabulek a většiny typů indexů v databázi.

Zde je návod, jak jej můžeme použít k vrácení stejných dat jako v předchozím příkladu.

SELECT
    partition_number,
    rows
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Výsledek:

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

Možná si všimnete, že je to téměř totožné s předchozím dotazem. Jediný rozdíl je v tom, že tento používá sloupec nazvaný rows , zatímco předchozí používal sloupec nazvaný row_count .

$PARTITIONS

$PARTITIONS systémová funkce vrací číslo oddílu, do kterého by byla namapována sada hodnot rozdělovacího sloupce pro jakoukoli zadanou funkci oddílu.

Tyto informace tedy můžeme použít k vytvoření dotazu, který vrací data o počtu řádků.

SELECT 
    $PARTITION.MoviesPartitionFunction(MovieId) AS [Partition Number],   
    COUNT(*) AS [Number of Rows] 
FROM Movies   
GROUP BY $PARTITION.MoviesPartitionFunction(MovieId)
ORDER BY [Partition Number] ASC

Výsledek:

+--------------------+------------------+
| Partition Number   | Number of Rows   |
|--------------------+------------------|
| 2                  | 100              |
| 3                  | 3979             |
+--------------------+------------------+

Jediný rozdíl oproti výsledku tohoto příkladu je ten, že vrací pouze počet neprázdných řádků.


  1. Získejte čas provedení dotazu PostgreSQL

  2. Provádění výpočtů v MySQL vs PHP

  3. 3 způsoby, jak extrahovat rok z data v SQL Server (T-SQL)

  4. Jak upgradovat PostgreSQL z verze 9.6 na verzi 10.1 bez ztráty dat?