2009-06-18 13 views
7

डेटाटेबल पर बाधाएं (उदा। प्राथमिककी & अनन्यकंट्रेन) SQL सर्वर में वैसे ही अधिक कुशलता का चयन करता है? या डेटा पर नियमों को लागू करने का उनका एकमात्र उद्देश्य है?ADO.NET डेटाटेबल बाधाएं प्रदर्शन को कैसे प्रभावित करती हैं?

myDT.Constraints.Add("PK", myDT.Columns["UniqueID"], true); //add a primary key 
myDT.Constrinats.Add(new UniqueConstraint(new DataColumn[] { //add a unique constraint for UserID 
    myDT.Columns["UserID"], myDT.Columns["UniqueID"] 
})); 

इन उदाहरणों संभावित बेहतर प्रदर्शन किया है चाहेंगे जब UniqueID या UserID द्वारा DataTable में डेटा को देख?

+0

मुझे लगता है कि संशोधन # 2 सही शीर्षक है, टेरापिन। "प्रभाव" इस मामले में "प्रभाव" से बेहतर शब्द है। मैं देखता हूं कि आप दोनों के बीच आगे और आगे जा रहे हैं, इसलिए यदि आप सहमत हैं तो मैं इसे संपादित करने के लिए इसे छोड़ दूंगा। –

उत्तर

0

सामान्य बाधाओं में धीमी चीजें नीचे। लेकिन चुनने के लिए अद्वितीय बाधा चीजों को गति दे सकती है (लेकिन मुझे एक एमएस संदर्भ मिल सकता है), यह भी चयन के आधार पर सीमित हो सकता है। अधिकांश संदर्भ मुझे चीजों को धीमा करने वाली बाधाओं के बारे में बात करते हैं।

तो आपके मामले में यह प्रदर्शन में सुधार कर सकता है।

http://msdn.microsoft.com/en-us/library/49z48hxc.aspx

+0

मुझे यह मिला: http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.adonet/2006-03/msg00379.html – eschneider

4

मुझे लगता है कि आप अनुक्रमित के उपयोग (प्रदर्शन) के साथ प्राथमिक कुंजी और बाधाओं (व्यवसाय डोमेन मॉडल) के उपयोग को भ्रमित कर रहे हैं।

एक विदेशी कुंजी एक अनुकूलक को प्रभावित कर सकती है, और विदेशी कुंजी पर एक सूचकांक बनाना आम है।

SQL सर्वर दुनिया में, प्राथमिक कुंजी अक्सर क्लस्टर्ड इंडेक्स के साथ उलझन में होती है, क्योंकि सरोगेट कुंजी (ऑटो-वृद्धि पहचान कॉलम सोचने) की तुलना में अक्सर प्राथमिक कुंजी और क्लस्टरर्ड इंडेक्स के रूप में चुना जाता है।

यह आलेख रुचि का हो सकता है: DataSet and DataTable in ADO.NET 2.0

अपनी टिप्पणी के जवाब में:

आप बार-बार गैर प्राथमिक कुंजी डेटा का उपयोग करके खोज करने के लिए की जरूरत है, एक DataView है बनाते हैं दोहराए गैर-प्राथमिक कुंजी खोजों के लिए एक DataView का उपयोग करें एक तरह का आदेश। यह एक अनुक्रमणिका बनाता है जिसका उपयोग पर किया जा सकता है खोज को निष्पादित करें। यह दोहराए गए खोजों के अनुकूल है क्योंकि अनुक्रमणिका बनाने के लिए कुछ लागत है।

DataView वस्तु को उजागर करता है का पता लगाएं और FindRows तरीकों ताकि आप क्वेरी कर सकते हैं कि अंतर्निहित DataTable में डेटा। यदि आप केवल एक ही क्वेरी कर रहे हैं, तो प्रसंस्करण की आवश्यकता है जो इंडेक्स बनाने के लिए द्वारा प्राप्त किए गए प्रदर्शन को को कम करता है।

जब आप एक DataView वस्तु बनाने, DataView निर्माता कि लेता क्रमबद्ध, RowFilter, और RowStateFilter मूल्यों निर्माता के रूप में तर्क अंतर्निहित DataTable के साथ उपयोग करें। DataView कन्स्ट्रक्टर का उपयोग करना सुनिश्चित करता है कि सूचकांक एक बार बनाया गया है। यदि आप खाली डेटा व्यू बनाते हैं और सॉर्ट, रोफिल्टर, या रोस्टेटफिल्टर गुण सेट करते हैं, तो सूचकांक पर कम से कम दो बार बनाया गया है।

+1

क्या कोई अनुक्रमणिका जोड़ने का कोई तरीका है एक एडीओ.NET डेटाटेबल जो मुझे उन कॉलम पर एक कुशल लुकअप देगा? मैंने एक नहीं देखा, इसलिए अनन्य कॉन्स्ट्रेन, जो SQL सर्वर में मुझे एक निहित सूचकांक देगा। मुझे नहीं पता कि एक ही दक्षता .NET में अनुवाद करती है या नहीं। – Seibar

+0

आपको इसे बेंचमार्क करना चाहिए और यदि आप अपनी स्थिति में सुधार करते हैं तो खुद के लिए देखें। परिणाम आपको चौंका सकते हैं। –

+0

बेंचमार्किंग हमेशा एक अच्छा विचार है। –

0

DataTable एस B-trees (या इसके कुछ बदलाव) का उपयोग करके लागू किए गए हैं। रिफ्लेक्टर में एक त्वरित झलक दिखाता है कि कक्षा प्लस LiveIndexes संपत्ति DataTable कक्षा में है, जिसका अर्थ है कि कुछ इंडेक्स हैं, लेकिन मुझे वास्तव में पता नहीं है कि वे कहां हैं।

मेरे (वास्तव में सीमित) अनुभव से: पीके पर प्रश्न वास्तव में तेज़ हैं।

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

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