[प्राथमिक] पर क्या मतलब है?


237

मैं एक SQL सेटअप स्क्रिप्ट बना रहा हूं और मैं उदाहरण के रूप में किसी और की स्क्रिप्ट का उपयोग कर रहा हूं। यहाँ स्क्रिप्ट का एक उदाहरण है:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[be_Categories](
    [CategoryID] [uniqueidentifier] ROWGUIDCOL  NOT NULL CONSTRAINT [DF_be_Categories_CategoryID]  DEFAULT (newid()),
    [CategoryName] [nvarchar](50) NULL,
    [Description] [nvarchar](200) NULL,
    [ParentID] [uniqueidentifier] NULL,
 CONSTRAINT [PK_be_Categories] PRIMARY KEY CLUSTERED 
(
    [CategoryID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

क्या कोई जानता है कि ON [PRIMARY] कमांड क्या करती है?

जवाबों:


248

जब आप Microsoft SQL सर्वर में एक डेटाबेस बनाते हैं, तो आपके पास कई फ़ाइल समूह हो सकते हैं, जहाँ भंडारण कई स्थानों, निर्देशिकाओं या डिस्क में बनाया जाता है। प्रत्येक फ़ाइल समूह का नाम दिया जा सकता है। प्राथमिक फ़ाइल समूह डिफ़ॉल्ट एक है, जो हमेशा बनाया जाता है, और इसलिए आपने जो SQL दिया है वह PRIMARY फ़ाइल समूह पर आपकी तालिका बनाता है।

पूर्ण सिंटैक्स के लिए MSDN देखें ।


153
इसका मतलब यह भी है कि यह आमतौर पर बेकार है और इसे स्क्रिप्ट से सुरक्षित रूप से हटाया जा सकता है
MGOwen

हां, उसी तरह से आप वेरिएबल इनीशियलाइज़ेशन को 0 और झूठ को छोड़ सकते हैं, क्योंकि यह सिर्फ डिफॉल्ट है, है ना?
मार्क सोउल

12
@MarkSowul जब तक आपके पास प्रदर्शन को अनुकूलित करने के लिए इसका उपयोग करने का एक अच्छा कारण नहीं है, हाँ, इसे छोड़ना और डिफ़ॉल्ट होने देना ठीक है। (इसलिए "आम तौर पर" MGOwen शामिल है।) शुरुआती चर को सुनिश्चित करना 0या falseउसके बारे में यह सुनिश्चित करना है कि आपका कोड एक ज्ञात स्थिति में चल रहा है, जो एक तार्किक और शुद्धता चिंता है और अनुकूलन चिंता नहीं है।
jpmc26

3
मुझे ON PRIMARYस्क्रिप्ट में दो बार वाक्यविन्यास दिखाई देता है - एक तालिका के लिए और दूसरा तालिका बाधा के लिए। भंडारण के मामले में तालिका की कमी के मामले में यह क्या दर्शाता है? यह मेरे लिए अप्रासंगिक या बेमानी लगता है। सिंथेटिक रूप से, इसे टेबल स्तर पर एक बार इसका उल्लेख करने के लिए पर्याप्त होना चाहिए था या क्या यह वास्तव में गैर-प्राथमिक फ़ाइल समूह पर प्राथमिक फ़ाइल समूह और तालिका बाधा डेटा पर तालिका को संग्रहीत करना संभव है?
RBT

1
यहाँ वास्तविक MSDN लिंक है। जवाब में एक अब काम नहीं करता है और मैं पोस्ट को संपादित नहीं कर सकता!
शेखर

38

यह संदर्भित करता है कि आप जिस फ़ाइल को बना रहे हैं, वह फ़ाइलग्रुप पर रहता है। तो आपका प्राथमिक फाइलग्रुप आपके सर्वर के ड्राइव D: \ पर रह सकता है। फिर आप इंडेक्स नामक एक अन्य फ़ाइल समूह बना सकते हैं। यह फ़ाइल समूह आपके सर्वर के ड्राइव E: \ पर रह सकता है।


यदि मैं किसी भिन्न फ़ाइल समूह पर PRIMARY फ़ाइल समूह और तालिका बाधा या अनुक्रमणिका डेटा संरचना पर तालिका संग्रहीत करता हूं तो इसका नकारात्मक प्रदर्शन प्रभाव पड़ेगा?
RBT

@RBT बहुत सारे वैरिएबल हैं जो इसे प्रभावित कर सकते हैं, और आमतौर पर बहुत सारे उत्तर "यह निर्भर करता है लेकिन ..." से शुरू होगा। dba.stackexchange.com/questions/2626/… और संबंधित प्रश्न देखें
कोडिंगबेडर

16

[प्राथमिक] "प्राथमिक" फ़ाइल समूह पर संरचनाएं बनाएगा। इस स्थिति में प्राथमिक कुंजी सूचकांक और तालिका डेटाबेस के भीतर "प्राथमिक" फ़ाइलग्रुप पर रखी जाएगी।


7

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

कारण इस तथ्य के कारण है कि इस मामले में बनाया जा रहा सूचकांक आपके प्राथमिक कुंजी स्तंभ पर एक संकुल सूचकांक है। क्लस्टर किए गए अनुक्रमणिका डेटा और आपकी तालिका की डेटा पंक्तियाँ अलग-अलग फ़ाइल समूहों पर कभी भी नहीं हो सकती हैं

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

CREATE TABLE [dbo].[be_Categories](
    [CategoryID] [uniqueidentifier] ROWGUIDCOL  NOT NULL CONSTRAINT [DF_be_Categories_CategoryID]  DEFAULT (newid()),
    [CategoryName] [nvarchar](50) NULL,
    [Description] [nvarchar](200) NULL,
    [ParentID] [uniqueidentifier] NULL,
 CONSTRAINT [PK_be_Categories] PRIMARY KEY CLUSTERED 
(
    [CategoryID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [SECONDARY]
GO

नोट: यदि कोई अनुक्रमणिका बनाई जा रही है, तो आपकी अनुक्रमणिका किसी भिन्न फ़ाइल समूह पर ही निवास कर सकती है, प्रकृति में गैर-संकुल है

नीचे दी गई स्क्रिप्ट जो एक गैर-क्लस्टर इंडेक्स बनाती है, [SECONDARY]फाइल फाइल ग्रुप पर बनाई जाएगी जब टेबल डेटा पहले से ही [PRIMARY]फाइल ग्रुप पर रहता है :

CREATE NONCLUSTERED INDEX [IX_Categories] ON [dbo].[be_Categories]
(
    [CategoryName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [Secondary]
GO

आप इस बारे में अधिक जानकारी प्राप्त कर सकते हैं कि किसी भिन्न फ़ाइल समूह पर गैर-क्लस्टर किए गए अनुक्रमणिका को संग्रहीत करने से आपके प्रश्नों को बेहतर प्रदर्शन करने में मदद मिल सकती है। यहाँ ऐसे ही एक कड़ी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.