यदि आपको यह पता लगाने की आवश्यकता है कि SQL सर्वर में तालिका को विभाजित किया गया है या नहीं, तो आप sys.tables
के विरुद्ध एक जॉइन चला सकते हैं , sys.indexes
, और sys.partition_schemes
दृश्य।
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
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';
परिणाम:
+---------+------------------------------+-------------+------------------+-----------------------+ | Table | Index | type_desc | is_primary_key | Partition Scheme | |---------+------------------------------+-------------+------------------+-----------------------| | Movies | PK__Movies__4BD2941AD44D2FCF | CLUSTERED | 1 | MoviesPartitionScheme | +---------+------------------------------+-------------+------------------+-----------------------+
यहां यह फिर से लंबवत आउटपुट का उपयोग कर रहा है (ताकि आपको किनारे पर स्क्रॉल न करना पड़े):
Table | Movies Index | PK__Movies__4BD2941AD44D2FCF type_desc | CLUSTERED is_primary_key | 1 Partition Scheme | MoviesPartitionScheme
मैं केवल वास्तविक कॉलम का एक छोटा सा सबसेट लौटा रहा हूं, लेकिन जो भी कॉलम आपकी रुचि के हों, उन्हें बेझिझक वापस कर दें।
साथ ही, आप सभी विभाजित तालिकाओं को वापस करने के लिए अंतिम पंक्ति को हटा सकते हैं।
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;
परिणाम:
+---------+------------------------------+-------------+------------------+-----------------------+ | Table | Index | type_desc | is_primary_key | Partition Scheme | |---------+------------------------------+-------------+------------------+-----------------------| | Movies | PK__Movies__4BD2941AD44D2FCF | CLUSTERED | 1 | MoviesPartitionScheme | +---------+------------------------------+-------------+------------------+-----------------------+
मेरे मामले में, डेटाबेस में केवल एक विभाजित तालिका है।
बस स्पष्ट होने के लिए, यह केवल उन तालिकाओं को लौटाता है जिन्हें स्पष्ट रूप से विभाजित किया गया है।
विभाजन लौटाएं
आप अन्य विचारों को भी क्वेरी कर सकते हैं, जैसे sys.partitions
और sys.dm_db_partition_stats
प्रत्येक तालिका के लिए विभाजन की सूची वापस करने के लिए।
ध्यान दें कि ये दोनों दृश्य उन तालिकाओं को भी लौटाएंगे जिन्हें स्पष्ट रूप से विभाजित नहीं किया गया है (यानी उनके पास केवल एक विभाजन है)। SQL सर्वर में, टेबल और दृश्य जिन्हें स्पष्ट रूप से विभाजित नहीं किया गया है, उनमें अभी भी एक विभाजन है (partition_number
=1)।
यहां sys.dm_db_partition_stats
. का एक उदाहरण दिया गया है :
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');
परिणाम:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+-------------+
यहां एक उदाहरण दिया गया है जहां मैं एक गैर-विभाजित तालिका के लिए विभाजन जानकारी लौटाता हूं।
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Cats');
परिणाम:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 3 | +--------------------+-------------+
जैसा कि उल्लेख किया गया है, इसमें अभी भी एक विभाजन है, और इसका partition_number
. है है 1
।