पीके बनाम टेबल पर संपीड़न के बीच क्या अंतर है?


9

डेटा संपीड़न तालिका पर सेट किया जा सकता है:

CREATE TABLE dbo.SomeTable(
    SomeId [bigint] NOT NULL,
    OtherId [bigint] NOT NULL,
    IsActive [bit] NOT NULL,
 CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED 
 (
    SomeId Desc
 )
) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE)

और इसे प्राथमिक कुंजी पर परिभाषित किया जा सकता है:

CREATE TABLE dbo.SomeTable(
    SomeId [bigint] NOT NULL,
    OtherId [bigint] NOT NULL,
    IsActive [bit] NOT NULL,
 CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED 
 (
    SomeId Desc
 ) WITH (DATA_COMPRESSION=PAGE)
) ON SomePartitionScheme(SomeId) 

लेकिन अगर आप इसे दोनों पर डालते हैं तो आपको यह त्रुटि मिलती है:

तालिका के विभाजन के लिए DATA_COMPRESSION विकल्प को एक से अधिक बार निर्दिष्ट किया गया था, या तालिका के विभाजन के समय इसके कम से कम एक विभाजन के लिए।

क्या इसे पीके बनाम टेबल पर रखने का कोई अंतर है?


क्या आपको लगता है कि यदि प्राथमिक कुंजी तालिका का क्लस्टर नहीं किया गया तो अंतर होगा ? :)
LowlyDBA

1
@ जॉन: मैं ऐसा अनुमान लगाऊंगा, लेकिन मुझे नहीं पता। (यही कारण है कि मैं पूछ रहा हूँ :)
21

जवाबों:


14

यह एक प्राथमिक कुंजी पर संपीड़न लगाने की बात नहीं है, बल्कि इसके बजाय क्लस्टर सूचकांक पर संपीड़न लगाने की बात है । SQL सर्वर के लिए, एक संकुल सूचकांक उस सूचकांक पर तालिका की भौतिक संरचना का आयोजन कर रहा है। या, छोटे रूप में, संकुल सूचकांक तालिका है। इसका मतलब यह है कि क्लस्टर इंडेक्स को कंप्रेस करना और टेबल को कंप्रेस करना कार्यात्मक रूप से समतुल्य है। यदि आप अपनी प्राथमिक कुंजी को गैर-संकुल सूचकांक के रूप में बनाना चाहते थे और आधार तालिका को एक ढेर के रूप में रखते थे, तो ये दोनों संरचनाएं अलग-अलग और संपीड़ित होंगी।


क्या होगा अगर, सभी तर्कसंगतता को धता बताते हुए, आपने अपनी प्राथमिक कुंजी को गैर-संकुल सूचकांक बना दिया और एक अलग क्लस्टर सूचकांक बनाया? संपीड़न तो फिर से वही होगा?
रॉस प्रेसर

1
यह नहीं होता। यहां प्राथमिक कुंजी के बारे में मत सोचो, यह अप्रासंगिक है। हमें यहां अनुक्रमित, क्लस्टर किए गए और गैर-क्लस्टर पर ध्यान देने की आवश्यकता है। आप अलग-अलग संकुल सूची और तालिका को अलग-अलग नहीं कर सकते क्योंकि वे एक ही वस्तु हैं। गुच्छेदार सूचकांक / तालिकाओं और गैर-संकुल सूचकांक अलग-अलग वस्तुएं हैं और व्यक्तिगत रूप से संपीड़ित किया जाना है।
माइक फाल

मैंने खुद को बुरी तरह से व्यक्त किया। आपका उत्तर बिल्कुल वही है जो मैं चला रहा था - क्लस्टर इंडेक्स को संपीड़ित किया जा सकता है (जो भी इसे अनुक्रमणित किया जाता है) या हीप को संपीड़ित किया जा सकता है (यदि कोई क्लस्टर इंडेक्स नहीं है), दोनों नहीं। और एक गैर-संकुल सूचकांक भी अलग से संपीड़ित किया जा सकता है।
रोस प्रेसर

बिल्कुल सही, लेकिन स्पष्ट होने के लिए, आपके पास एक ही टेबल पर एक ढेर और एक संकुल सूचकांक नहीं हो सकता है। यह एक या दूसरा है। SQL सर्वर कैसे व्यवहार करता है, इसकी वजह से, यह आम है कि लोग संकुल कुंजी के साथ प्राथमिक कुंजी को भ्रमित करते हैं, इसलिए मैं यह सुनिश्चित करना चाहता हूं कि इस उत्तर के लिए अंतर समझ में आए।
माइक फाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.