Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Dapatkan Nilai Batas untuk Tabel yang Dipartisi di SQL Server (T-SQL)

Di SQL Server, Anda dapat menggunakan sys.partition_range_values tampilan katalog sistem untuk mengetahui nilai batas yang digunakan untuk tabel yang dipartisi.

Namun, Anda perlu mengetahui function_id fungsi partisi sebelum Anda menggunakan tampilan itu.

Namun seperti biasa, Anda dapat menjalankan gabungan terhadap sekumpulan tabel lain untuk mendapatkan info yang diinginkan.

sys.partition_range_values

Pertama, mari kita lihat kolom apa sys.partition_range_values lihat pengembalian.

 SELECT * FROM sys.partition_range_values;

Hasil:

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

Untungnya bagi saya, saya hanya punya satu tabel yang dipartisi di database ini, jadi saya tidak dibombardir dengan hasil.

Seperti disebutkan, tampilan ini mengembalikan function_id , jadi kita bisa menggunakannya untuk menggabungkan sekumpulan tabel lain, sehingga kita bisa mengembalikan data untuk tabel tertentu.

Dalam kasus saya ini berlebihan, mengingat hanya ada satu tabel yang dipartisi, tetapi mari kita asumsikan Anda memiliki banyak tumpukan dan indeks yang dipartisi, dan Anda hanya ingin mempersempitnya.

Persempit ke Tabel

Berikut adalah contoh mengembalikan rentang batas untuk tabel tertentu yang disebut 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;

Hasil:

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

Ini dia lagi, tapi kami memperluas daftar pilih untuk memasukkan info lain, seperti nama indeks, nama fungsi partisi, dll.

 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;

Hasil:

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

Ini hasilnya lagi menggunakan output vertikal (jadi Anda tidak perlu menggulir ke samping):

-[ 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. Alasan untuk tidak memiliki indeks berkerumun di SQL Server 2005

  2. Menghitung Running Total dengan OVER Clause dan PARTITION BY Clause di SQL Server

  3. Microsoft SQL Server 2005/2008:XML vs tipe data teks/varchar

  4. Bagaimana Anda bisa memberi nama Tabel Dataset yang Anda kembalikan dalam proc tersimpan?

  5. Temukan Tipe Data Kolom yang Dikembalikan dalam Kumpulan Hasil di SQL Server