निम्नलिखित डीडीएल पर विचार करें:

ALTER TABLE dbo.MyTable
ADD CONSTRAINT [PK_MyKey] PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (STATISTICS_NORECOMPUTE=OFF, IGNORE_DUP_KEY=OFF, DATA_COMPRESSION=PAGE)
GO

यह एक संकुचित प्राथमिक कुंजी है। टाडा!

मुझे जो परेशान कर रहा है वह यह है कि मुझे एसएसएमएस में उस संपीड़न का कोई रिकॉर्ड नहीं दिख रहा है?

  • मैं इसे ऑब्जेक्ट एक्सप्लोरर के संदर्भ मेनू से तालिका, कॉलम या मुख्य गुण संवाद में नहीं ढूंढता।
  • अगर मैं SSMS को स्क्रिप्ट => कुंजी बनाने के लिए कहता हूं, तो इसमें वह DATA_COMPRESSION सेटिंग शामिल नहीं है। मैंने पाया:
/****** Object:  Index [PK_MyKey]    Script Date: 07/09/2020 11:01:16 ******/
ALTER TABLE [dbo].[MyTable] ADD  CONSTRAINT [PK_MyKey] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
GO

तो ... क्या यह बताना संभव है कि एक मौजूदा कुंजी (जो मैंने नहीं बनाई थी, और कौन है जो संस्करण नियंत्रित नहीं है :sigh:) थी दबा हुआ?

0
Brondahl 7 सितंबर 2020, 13:05

1 उत्तर

सबसे बढ़िया उत्तर

दस्तावेज़ीकरण यह sys.indexes और sys.partitions ऑब्जेक्ट में पाया जा सकता है:

मेटाडाटा

निम्न सिस्टम दृश्य में संकुल अनुक्रमणिका के लिए डेटा संपीड़न के बारे में जानकारी होती है:

  • sys.indexes (Transact-SQL) - प्रकार और type_desc कॉलम में CLUSTERED COLUMNSTORE और NONCLUSTERED COLUMNSTORE शामिल हैं।
  • sys.partitions (Transact-SQL) - data_compression और data_compression_desc कॉलम में COLUMNSTORE और COLUMNSTORE_ARCHIVE शामिल हैं।

प्रक्रिया sp_estimate_data_compression_ Savings (ट्रांजैक्ट-एसक्यूएल) कॉलमस्टोर इंडेक्स पर भी लागू हो सकता है।

उपरोक्त के लिए, विशेष रूप से, आप कॉलम data_compression और/या data_compression_desc पर एक नज़र डालना चाहते हैं:

CREATE TABLE dbo.MyTable_Comp (ID int NOT NULL);
ALTER TABLE dbo.MyTable_Comp
ADD CONSTRAINT [PK_MyKey_C] PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (STATISTICS_NORECOMPUTE=OFF, IGNORE_DUP_KEY=OFF, DATA_COMPRESSION=PAGE)
GO

CREATE TABLE dbo.MyTable_NoComp (ID int NOT NULL);
ALTER TABLE dbo.MyTable_NoComp
ADD CONSTRAINT [PK_MyKey_NC] PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (STATISTICS_NORECOMPUTE=OFF, IGNORE_DUP_KEY=OFF);

GO

SELECT i.[name], p.[data_compression], p.data_compression_desc
FROM sys.indexes i
     JOIN sys.partitions p ON i.object_id = p.object_id
WHERE i.[name] IN ('PK_MyKey_C','PK_MyKey_NC');

GO
DROP TABLE dbo.MyTable_Comp;
DROP TABLE dbo.MyTable_NoComp

उपरोक्त 2 तालिकाओं के लिए, यह निम्नलिखित देता है:

name        | data_compression | data_compression_desc
------------|------------------|----------------------
PK_MyKey_C  | 2                | PAGE
PK_MyKey_NC | 0                | NONE
1
Larnu 7 सितंबर 2020, 13:18