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

Uzyskaj wartości graniczne dla tabeli partycjonowanej w programie SQL Server (T-SQL)

W SQL Server możesz użyć sys.partition_range_values widok katalogu systemowego, aby znaleźć wartości graniczne używane dla tabeli partycjonowanej.

Musisz jednak znać function_id funkcji partycji przed użyciem tego widoku.

Ale jak zawsze, możesz przeprowadzić sprzężenie z kilkoma innymi stołami, aby uzyskać pożądane informacje.

sys.partition_range_values

Najpierw zobaczmy, jakie kolumny sys.partition_range_values zobacz zwroty.

 SELECT * FROM sys.partition_range_values;

Wynik:

+---------------+---------------+----------------+---------+
| function_id   | boundary_id   | parameter_id   | value   |
|---------------+---------------+----------------+---------|
| 65542         | 1             | 1              | -1      |
| 65542         | 2             | 1              | 100     |
| 65542         | 3             | 1              | 10000   |
+---------------+---------------+----------------+---------+

Na szczęście dla mnie w tej bazie danych mam tylko jedną partycjonowaną tabelę, więc nie jestem bombardowany wynikami.

Jak wspomniano, ten widok zwraca function_id , dzięki czemu możemy użyć tego do połączenia kilku innych tabel, dzięki czemu będziemy mogli zwrócić dane dla określonej tabeli.

W moim przypadku jest to zbyteczne, biorąc pod uwagę, że istnieje tylko jedna podzielona na partycje tabela, ale załóżmy, że masz wiele partycjonowanych stert i indeksów i chcesz po prostu je zawęzić.

Zawęź do tabeli

Oto przykład zwracania zakresów granic dla określonej tabeli o nazwie Movies .

SELECT 
    p.partition_number,
    r.boundary_id, 
    r.value AS [Boundary Value]   
FROM sys.tables AS t  
JOIN sys.indexes AS i  
    ON t.object_id = i.object_id  
JOIN sys.partitions AS p
    ON i.object_id = p.object_id AND i.index_id = p.index_id   
JOIN  sys.partition_schemes AS s   
    ON i.data_space_id = s.data_space_id  
JOIN sys.partition_functions AS f   
    ON s.function_id = f.function_id  
LEFT JOIN sys.partition_range_values AS r   
    ON f.function_id = r.function_id and r.boundary_id = p.partition_number  
WHERE i.type <= 1 AND t.name = 'Movies' 
ORDER BY p.partition_number ASC;

Wynik:

+--------------------+---------------+------------------+
| partition_number   | boundary_id   | Boundary Value   |
|--------------------+---------------+------------------|
| 1                  | 1             | -1               |
| 2                  | 2             | 100              |
| 3                  | 3             | 10000            |
| 4                  | NULL          | NULL             |
+--------------------+---------------+------------------+

Tutaj jest znowu, ale rozwijamy listę wyboru, aby zawierała inne informacje, takie jak nazwa indeksu, nazwa funkcji partycji itp.

 SELECT 
    t.name AS [Table], 
    i.name AS [Index], 
    p.partition_number,
    f.name,
    r.boundary_id, 
    r.value AS [Boundary Value]   
FROM sys.tables AS t  
JOIN sys.indexes AS i  
    ON t.object_id = i.object_id  
JOIN sys.partitions AS p
    ON i.object_id = p.object_id AND i.index_id = p.index_id   
JOIN  sys.partition_schemes AS s   
    ON i.data_space_id = s.data_space_id  
JOIN sys.partition_functions AS f   
    ON s.function_id = f.function_id  
LEFT JOIN sys.partition_range_values AS r   
    ON f.function_id = r.function_id and r.boundary_id = p.partition_number  
WHERE i.type <= 1 AND t.name = 'Movies' 
ORDER BY p.partition_number ASC;

Wynik:

+---------+------------------------------+--------------------+-------------------------+---------------+------------------+
| Table   | Index                        | partition_number   | name                    | boundary_id   | Boundary Value   |
|---------+------------------------------+--------------------+-------------------------+---------------+------------------|
| Movies  | PK__Movies__4BD2941AD44D2FCF | 1                  | MoviesPartitionFunction | 1             | -1               |
| Movies  | PK__Movies__4BD2941AD44D2FCF | 2                  | MoviesPartitionFunction | 2             | 100              |
| Movies  | PK__Movies__4BD2941AD44D2FCF | 3                  | MoviesPartitionFunction | 3             | 10000            |
| Movies  | PK__Movies__4BD2941AD44D2FCF | 4                  | MoviesPartitionFunction | NULL          | NULL             |
+---------+------------------------------+--------------------+-------------------------+---------------+------------------+

Oto ten wynik ponownie przy użyciu wyjścia pionowego (abyś nie musiał przewijać na boki):

-[ RECORD 1 ]-------------------------
Table            | Movies
Index            | PK__Movies__4BD2941AD44D2FCF
partition_number | 1
name             | MoviesPartitionFunction
boundary_id      | 1
Boundary Value   | -1
-[ RECORD 2 ]-------------------------
Table            | Movies
Index            | PK__Movies__4BD2941AD44D2FCF
partition_number | 2
name             | MoviesPartitionFunction
boundary_id      | 2
Boundary Value   | 100
-[ RECORD 3 ]-------------------------
Table            | Movies
Index            | PK__Movies__4BD2941AD44D2FCF
partition_number | 3
name             | MoviesPartitionFunction
boundary_id      | 3
Boundary Value   | 10000
-[ RECORD 4 ]-------------------------
Table            | Movies
Index            | PK__Movies__4BD2941AD44D2FCF
partition_number | 4
name             | MoviesPartitionFunction
boundary_id      | NULL
Boundary Value   | NULL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dodać ciąg z wartością automatycznego przyrostu w programie SQL Server?

  2. Użyć liczby zmiennoprzecinkowej lub dziesiętnej dla kwoty w dolarach w aplikacji księgowej?

  3. Oto trzy powody, dla których możesz zauważyć szczytową aktywność w swojej instancji SQL

  4. T-SQL — aliasowanie przy użyciu =kontra as

  5. Dane przestawne w T-SQL