sql - क्या यह सूचकांक को सिर्फ एक कॉलम के साथ तालिका में समझ लेता है?




tsql indexing sql-server-2012 (3)

मेरा मत यह है कि शायद यह आपके परिदृश्य में वास्तव में समझ में नहीं आता। आप कह रहे हैं कि एक तालिका के साथ यह तालिका दूसरी तालिका में रिकॉर्ड को फ़िल्टर करने के लिए दूसरे तालिका में शामिल हो जाएगी, तो क्यों न केवल इस तालिका को हटाएं, अन्य तालिका में अन्य स्तंभ को इंडेक्स करें और वह फ़िल्टर करें?

मूलतः, आप क्यों लिख रहे हैं:

SELECT * FROM manycols M INNER JOIN singlecol s ON m.id = s.id WHERE s.id = 123

जब यह है:

SELECT * FROM manycols m WHERE m.id = 123

मान लीजिए तर्क है कि कईकोलों में एक मिलियन पंक्तियाँ हैं, और सिंगलकॉल में एक हजार है आप हज़ार मिलान की पंक्तियां चाहते हैं, यह कई कैओल्स हैं, जिन्हें लाभ के लिए अनुक्रमित करने की आवश्यकता होगी।

मान लीजिए कि तर्क है कि आप एकल पंक्ति में छोड़कर सभी पंक्तियां चाहते हैं; आप सूचकांक singlecol सकता है, लेकिन अनुकूलक सिर्फ एक पूरी तरह से एक मेज में लोड करने के लिए चुन सकते हैं, फिर भी, अनुक्रमण, यह जरूरी नहीं कि मदद करेगा

ऐसा लगता है कि ऐसा करने के लिए संभवतः एक और तरीका है जो आपको इस एकल स्तंभ तालिका को पूरी तरह से हटा देता है

मुझे आश्चर्य है कि क्या यह सूचकांक को तालिका में समझ में आता है, जिसमें सिर्फ एक स्तंभ है? तालिका 100 या 1000 के अभिलेखों के साथ आबादी होगी और इसके रिकॉर्डों को फ़िल्टर करने के लिए दूसरे (बड़ी टेबल) में शामिल होने के लिए उपयोग किया जाएगा।

धन्यवाद!


हां और ना। एक स्पष्ट सूचक शायद मतलब नहीं है हालांकि, एक primary key रूप में एक स्तंभ को परिभाषित करना अक्सर किया जाता है (यह माना जाता है कि यह कभी भी NULL और अद्वितीय नहीं है)।

यह वास्तव में एक आम बात है मेरे लिए असाधारण तालियां बनाने के लिए असामान्य नहीं है, जैसे तर्क:

from . . . 
where not exists (select 1 from exclusion_table et where et.id = ?.id)

प्राथमिक कुंजी सूचकांक इस तरह की एक क्वेरी को बढ़ा सकता है।

आपके मामले में, इसमें कोई फर्क नहीं पड़ेगा यदि बड़ी तालिका में शामिल होने के लिए उपयोग किए गए आईडी पर एक इंडेक्स है हालांकि, आप किस इंडेक्स का उपयोग करने का विकल्प चुनने के विकल्प के अनुकूलक को दे सकते हैं


मेरा पसंदीदा उत्तर इस धागे में पहली वाक्य के सुझाव के रूप में है। पदानुक्रम को बनाए रखने और पदानुक्रम की क्वेरी करने के लिए नेस्टेड सेट का उपयोग करने के लिए एक एडजेंसी सूची का उपयोग करें।

अब तक की समस्या यह है कि एडजेस्सी लिस्ट से नेस्ड सेट्स तक कवरन विधि भयभीत रूप से धीमी रही है क्योंकि अधिकांश लोग रूपांतरण करने के लिए "पुश स्टैक" के रूप में जाने वाली अत्यधिक आरबीएआर विधि का उपयोग करते हैं और इसे महंगे तरीके से माना जाता है समायोजन सूची और नेस्टेड सेट के शानदार प्रदर्शन द्वारा रखरखाव की सादगी के निर्वाण तक पहुंचने के लिए। नतीजतन, ज्यादातर लोगों को एक या दूसरे के लिए व्यवस्थित होना पड़ता है, खासकर यदि एक से अधिक 100,000 नोड्स कहें तो कहें। पुश स्टैक विधि का उपयोग करके एमएलएमर्स को एक छोटे मिलियन नोड पदानुक्रम के रूप में माना जाएगा, इस पर रूपांतरण करने के लिए एक पूरा दिन लग सकता है।

मैंने सोचा कि मैं सेल्को को प्रतिस्पर्धात्मक सूची को नेस्टेड सेट में बदलने के लिए एक विधि के साथ आकर एक असंभव प्रतीत होता हूं जो गति असंभव लगता है। मेरे i5 लैपटॉप पर पुश स्टैक विधि का प्रदर्शन यहां दिया गया है।

Duration for     1,000 Nodes = 00:00:00:870 
Duration for    10,000 Nodes = 00:01:01:783 (70 times slower instead of just 10)
Duration for   100,000 Nodes = 00:49:59:730 (3,446 times slower instead of just 100) 
Duration for 1,000,000 Nodes = 'Didn't even try this'

और यहां नई विधि के लिए अवधि है (ब्रश स्टैक विधि कोष्ठक में)।

Duration for     1,000 Nodes = 00:00:00:053 (compared to 00:00:00:870)
Duration for    10,000 Nodes = 00:00:00:323 (compared to 00:01:01:783)
Duration for   100,000 Nodes = 00:00:03:867 (compared to 00:49:59:730)
Duration for 1,000,000 Nodes = 00:00:54:283 (compared to something like 2 days!!!)

हाँ, यह सही है। एक मिनट से भी कम समय में 1 मिलियन नोड्स और 100 सेकंड नोड्स 4 सेकंड के भीतर परिवर्तित हो जाते हैं।

आप नई विधि के बारे में पढ़ सकते हैं और निम्नलिखित यूआरएल पर कोड की एक प्रति प्राप्त कर सकते हैं। http://www.sqlservercentral.com/articles/Hierarchy/94040/

मैंने इसी तरह के तरीकों का उपयोग करके "पूर्व-समेकित" पदानुक्रम भी विकसित किया। एमएलएमर्स और सामग्रियों के बिल बनाने वाले लोग विशेष रूप से इस लेख में रुचि रखते हैं। http://www.sqlservercentral.com/articles/T-SQL/94570/

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





sql tsql indexing sql-server-2012