2009-05-12 10 views
9

एक संबंध तालिका कई से कई (एम: एन) संबंधों का प्रतिनिधित्व करने का आम समाधान है।संबंध तालिका के लिए इष्टतम अनुक्रमण रणनीति क्या है?

 
A  AtoB  B 
----  ----  ---- 
*id  *Aid  *id 
data  *Bid  data 

यह कैसे अनुकूलतम प्रदर्शन प्रदान करने के लिए हर शामिल हों स्थिति में सूचीबद्ध किया जाना चाहिए:

सरलतम रूप में, यह एक नई समग्र प्राथमिक कुंजी को दो संबंधित तालिकाओं को संदर्भित विदेशी कुंजी को जोड़ती है?

  1. संकुल अनुक्रमणिका से अधिक (Aid ASC, Bid ASC) (यह वैसे भी अनिवार्य है, मुझे लगता है)
  2. विकल्प # 1 प्लस एक अतिरिक्त सूचकांक से अधिक (Bid ASC, Aid ASC)
  3. या विकल्प # 1 प्लस एक अतिरिक्त सूचकांक से अधिक (Bid ASC)
  4. कोई अन्य विकल्प? विक्रेता-विशिष्ट सामान, शायद?
+0

अच्छा सवाल, धन्यवाद। मैं इसके ब्लॉग में एक पोस्ट कर दूंगा। – Quassnoi

+0

मेरा Google रीडर मुझे बताएगा।:) – Tomalak

+0

आह, तो आप दूसरे आदमी हैं! – Quassnoi

उत्तर

6

मैं कुछ परीक्षण किए गए, और यहाँ अद्यतन है:

सभी संभव मामलों को कवर करने के लिए, आप की आवश्यकता होगी:

CLUSTERED INDEX (a, b) 
INDEX (b) 

यह सब JOIN sutiations और ORDER BY

को कवर किया जाएगा

ध्यान दें कि B पर एक सूचकांक वास्तव में (B, A) पर सॉर्ट किया गया है क्योंकि यह क्लस्टरर्ड पंक्तियों का संदर्भ देता है।

जब तक आपके a और b टेबल पहचान-पत्र पर PRIMARY KEY की है, तो आप ORDER BY ASC, DESC को संभालने के लिए अतिरिक्त अनुक्रमणिका बनाने के लिए नहीं जरूरत करना

+0

आपको अभी भी ORDER BY बी के लिए एक इंडेक्स का उपयोग करने के लिए (बी डीईएससी) पर एक इंडेक्स चाहिए, एक डीईएससी – Quassnoi

+0

एक इंडेक्स (बी, ए) का लाभ नहीं है? – Tomalak

+2

INDEX (बी) वास्तव में INDEX (बी, ए, बी) है, क्योंकि आपकी तालिका क्लस्टर है। एक सूचकांक (बी, ए) वास्तव में इंडेक्स (बी, ए, ए, बी) होगा जो पूरी तरह से व्यर्थ है। – Quassnoi

1

मुझे लगता है कि समाधान 2 इष्टतम है। मैं मूल्यों को देखकर क्लस्टर्ड इंडेक्स का ऑर्डर चुनता हूं और उम्मीद करता हूं कि किसके पास अधिक विशिष्ट पंक्तियां हैं। वह पहले जाता है। इसके अलावा माता-पिता टेबल पर unique या primary key अनुक्रमणिका होना महत्वपूर्ण है।

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

+0

लेकिन * कौन सा * इष्टतम है? 1., 2. या 3.? :) इसके अलावा, प्रश्न एक सामान्य समस्या से अधिक सामान्य कैसे है। – Tomalak

+0

तोमालाक: मैंने सोचा था कि आप सभी का मतलब है :) ओह, मुझे # 1 + नहीं देखा गया ... मैं नंबर 2 का चयन करूंगा। –

+0

एचएम, शायद मुझे यह स्पष्ट करने के लिए प्रश्न को दोबारा सुधारना होगा। :) – Tomalak

1

मैं एसक्यूएल सर्वर में निष्पादन की योजना की जांच 2005 योजनाओं है कि पता चला है द्वारा कुछ त्वरित और गंदी परीक्षण किया है:

अधिक जानकारी के लिए अपने ब्लॉग में प्रविष्टि देखें SQL अधिकांश प्रश्नों के लिए सहायता, बोली पर क्लस्टरेड इंडेक्स का उपयोग करता है। बोली (एएससी) पर एक सूचकांक जोड़ना से पता चलता है कि यह प्रकार

select * from A 
    inner join AtoB on Aid = A.id 
    inner join B on Bid = B.id 
where Bid = 1 

के प्रश्नों तो मैं # 3 समाधान के लिए मतदान कर रहा हूँ के लिए प्रयोग किया जाता है।

+0

आपने अनुमान लगाया कि @Quassnoi ने ट्रैक करने और व्याख्या करने के लिए समय निकाला। किसी भी मामले में +1। :) – Tomalak

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