Jika Anda perlu mengetahui apakah tabel telah dipartisi di SQL Server, Anda dapat menjalankan gabungan terhadap sys.tables
, sys.indexes
, dan sys.partition_schemes
dilihat.
Contoh
Berikut ini contoh untuk didemonstrasikan.
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';
Hasil:
+---------+------------------------------+-------------+------------------+-----------------------+ | Table | Index | type_desc | is_primary_key | Partition Scheme | |---------+------------------------------+-------------+------------------+-----------------------| | Movies | PK__Movies__4BD2941AD44D2FCF | CLUSTERED | 1 | MoviesPartitionScheme | +---------+------------------------------+-------------+------------------+-----------------------+
Ini dia lagi menggunakan output vertikal (agar tidak perlu scroll ke samping):
Table | Movies Index | PK__Movies__4BD2941AD44D2FCF type_desc | CLUSTERED is_primary_key | 1 Partition Scheme | MoviesPartitionScheme
Saya hanya mengembalikan sebagian kecil dari kolom yang sebenarnya, tetapi silakan kembalikan kolom mana pun yang Anda minati.
Anda juga dapat menghapus baris terakhir untuk mengembalikan semua tabel yang dipartisi.
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;
Hasil:
+---------+------------------------------+-------------+------------------+-----------------------+ | Table | Index | type_desc | is_primary_key | Partition Scheme | |---------+------------------------------+-------------+------------------+-----------------------| | Movies | PK__Movies__4BD2941AD44D2FCF | CLUSTERED | 1 | MoviesPartitionScheme | +---------+------------------------------+-------------+------------------+-----------------------+
Dalam kasus saya, hanya ada satu tabel yang dipartisi dalam database.
Untuk memperjelas, ini hanya mengembalikan tabel yang telah dipartisi secara eksplisit.
Kembalikan Partisi
Anda juga dapat menanyakan tampilan lain, seperti sys.partitions
dan sys.dm_db_partition_stats
untuk mengembalikan daftar partisi untuk setiap tabel.
Perhatikan bahwa kedua tampilan ini juga akan mengembalikan tabel yang belum secara eksplisit dipartisi (yaitu hanya memiliki satu partisi). Di SQL Server, tabel dan tampilan yang belum dipartisi secara eksplisit masih memiliki partisi (partition_number
=1).
Berikut ini contoh sys.dm_db_partition_stats
:
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');
Hasil:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+-------------+
Berikut adalah contoh di mana saya mengembalikan info partisi untuk tabel yang tidak dipartisi.
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Cats');
Hasil:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 3 | +--------------------+-------------+
Seperti disebutkan, masih memiliki satu partisi, dan partition_number
adalah 1
.