SQL सर्वर में कवर के अलावा सिवाय ऑपरेटर कैसे काम करता है, इसका आंतरिक एल्गोरिथ्म क्या है ? क्या यह आंतरिक रूप से प्रत्येक पंक्ति का हैश लेता है और तुलना करता है?
डेविड लोज़िंकी ने एक अध्ययन चलाया, एसक्यूएल: नए रिकॉर्ड डालने का सबसे तेज़ तरीका , जहां कोई पहले से मौजूद नहीं है उन्होंने दिखाया कि सिवाय इसके कि बयान बड़ी संख्या में पंक्तियों के लिए सबसे तेज़ है; नीचे हमारे परिणामों के लिए बारीकी से बांधना।
मान लें: मुझे लगता है कि लेफ्ट जॉइन सबसे तेज़ होगा, क्योंकि यह केवल 1 कॉलम की तुलना करता है, इसके अलावा सबसे लंबा लगेगा, क्योंकि इसमें सभी कॉलम की तुलना करना है।
इन परिणामों के साथ, अब हमारी सोच को छोड़कर स्वचालित रूप से और आंतरिक रूप से प्रत्येक पंक्ति का एक हैश लेता है? मैंने निष्पादन योजना को छोड़कर देखा और यह कुछ हैश का उपयोग करता है।
पृष्ठभूमि: हमारी टीम दो ढेर तालिकाओं की तुलना कर रही थी। तालिका A पंक्तियों को तालिका B में नहीं, तालिका B में डाला गया था।
ढेर तालिकाओं (विरासत पाठ फाइलसिस्टम से) में प्राथमिक कुंजी / गाइड / पहचानकर्ता नहीं होते हैं। कुछ तालिकाओं में डुप्लिकेट पंक्तियाँ थीं, इसलिए हमने प्रत्येक पंक्ति के Hash को पाया, और डुप्लिकेट को हटा दिया, और प्राथमिक कुंजी पहचानकर्ता बनाए।
1) सबसे पहले हम एक अपवाद को छोड़कर (हैश कॉलम)
select * from TableA
Except
Select * from TableB,
2) इसके बाद हमने HashRowId पर दो टेबलों के बीच एक लेफ्ट जॉइन तुलना की
select *
FROM dbo.TableA A
left join dbo.TableB B
on A.RowHash = B.RowHash
where B.Hash is null
आश्चर्यजनक रूप से सिवाय स्टेटमेंट इंसर्ट सबसे तेज था।
परिणाम वास्तव में डेविड लोज़िंकी से परीक्षण परिणामों के करीब नक्शा