2012-09-09 12 views
9

मेरे पास nvarchar (अधिकतम) डेटाटाइप कॉलम वाला एक टेबल है। इस कॉलम में डेटा की अधिकतम लंबाई 37000 है, तो मैं nvarchar (4000) का उपयोग नहीं कर सकता। मैं इस कॉलम के लिए इंडेक्स कैसे बना सकता हूं? मेरा डेटा फारसी में यूनिकोड टेक्स्ट है।मैं एसक्यूएल में nvarchar (अधिकतम) डेटाटाइप पर इंडेक्स कैसे बना सकता हूं?

+2

कि लंबाई के एक स्तंभ का अनुक्रमण काफी हद तक व्यर्थ प्रतीत होता है .... सुझाव है कि आप Indexinhg –

+0

पूर्ण पाठ को देखने भी देखें http://stackoverflow.com/a/21624526/ 1 9 4717 – Tony

उत्तर

11

1- आप इसे में उपयोग एक "शामिल करें"

IF OBJECT_ID('tempdb..#example') IS NOT NULL 
BEGIN 
    DROP TABLE #example 
END 

CREATE TABLE #example (id INT PRIMARY KEY IDENTITY(1,1), name VARCHAR(MAX)) 

CREATE NONCLUSTERED INDEX IDX_NC_temp_example_name ON #example(id) INCLUDE(name) 

2-या "अंततः" विधि आप उपयोग करने के लिए विचार कर सकते हैं कर सकते हैं। यह हैश इंडेक्स को खरीदने के लिए विशेष रूप से है, विशेष रूप से लंबे वर्ण स्तंभों (जैसा कि आपके पास है) को अनुक्रमणित करने के लिए अनुक्रमण गति में सुधार करना है। आप और अधिक पढ़ सकते हैं और उदाहरण ढूंढ सकते हैं: http://msdn.microsoft.com/en-us/library/ms189788.aspx

+1

हाँ, लेकिन एक लंबे पाठ कॉलम को अनुक्रमणित करने का क्या मतलब है? एक कवर इंडेक्स के अलावा (यानी शामिल करने का हिस्सा, और फिर भी इसके संदिग्ध अनुकूलक इसका उपयोग करेंगे) –

+0

यह कॉलम को अनुक्रमित नहीं करता है। इसमें इसे इंडेक्स डेटा में शामिल किया गया है। – gliljas

1

बेस्ट DROP_EXISTING = ON का उपयोग कर रहा है, जो मौजूदा इंडेक्स का उपयोग करके पुनर्निर्माण करता है।

यहाँ एक उदाहरण

CREATE NONCLUSTERED INDEX IDX_NC_temp_example_name ON #example(id) INCLUDE(name) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, SORT_IN_TEMPDB = ON, DROP_EXISTING = ON, ONLINE = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY] 
संबंधित मुद्दे