2010-05-09 17 views
169

मैं एक एसक्यूएल सेटअप स्क्रिप्ट बना रहा हूं और मैं किसी और की स्क्रिप्ट का उदाहरण उदाहरण के रूप में उपयोग कर रहा हूं।[प्राथमिक] का क्या अर्थ है?

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 

किसी को भी पता है क्या पर [प्राथमिक] आदेश करता है: यहाँ स्क्रिप्ट का एक उदाहरण है?

उत्तर

182

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

पूर्ण वाक्यविन्यास के लिए MSDN देखें।

+115

इसका भी अर्थ है कि यह आमतौर पर ** बेकार है और स्क्रिप्ट से ** सुरक्षित रूप से हटाया जा सकता है। – MGOwen

+0

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

+9

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

11

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

26

यह संदर्भित करता है कि आप जिस ऑब्जेक्ट को बना रहे हैं, उस फ़ाइल समूह को किस प्रकार समूह बना रहा है। तो आपका प्राथमिक फ़ाइल समूह आपके सर्वर के ड्राइव डी: \ पर रह सकता है। फिर आप इंडेक्स नामक एक और फ़ाइल समूह बना सकते हैं। यह फ़ाइल समूह आपके सर्वर के ड्राइव ई: \ पर रह सकता है।

+3

आरटीएफएम – JumpingJezza

+0

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

+0

@ आरबीटी बहुत सारे चर हैं जो इसे प्रभावित कर सकते हैं, और आमतौर पर बहुत सारे उत्तर "यह निर्भर करता है लेकिन ..." http: //dba.stackexchange देखेंगे।कॉम/प्रश्न/2626/जब-नॉन-क्लस्टर-इंडेक्स-ऑन-से-अलग-अलग-फ़ाइल समूह और संबंधित प्रश्न – codingbadger

3

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

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

तो यदि आपके डेटाबेस पर दो फ़ाइल समूह हैं उदा। प्राथमिक और माध्यमिक नीचे दी गई स्क्रिप्ट आपके डेटा डेटा और क्लस्टर किए गए इंडेक्स डेटा को प्राथमिक फ़ाइल समूह पर ही संग्रहीत करेगी, भले ही मैंने तालिका डेटा के लिए एक अलग फ़ाइल समूह ([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 

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

संबंधित मुद्दे