सबसे पहले, मान लेते हैं कि (id)
तालिका की प्राथमिक कुंजी है। इस मामले में, हाँ, जोड़ (साबित किए जा सकते हैं) निरर्थक हैं और उन्हें समाप्त किया जा सकता है।
अब यह सिर्फ सिद्धांत है - या गणित। ऑप्टिमाइज़र के लिए एक वास्तविक उन्मूलन करने के लिए, सिद्धांत को कोड में परिवर्तित किया गया है और ऑप्टिमाइज़र के ऑप्टिमाइज़ेशन ऑफ़ ऑप्टिमाइज़ेशन / रीराइटिंग / एलिमिनेशन में जोड़ा गया है। ऐसा होने के लिए, (DBMS) डेवलपर्स को यह सोचना चाहिए कि इससे दक्षता में अच्छे लाभ होंगे और यह एक सामान्य पर्याप्त मामला है।
व्यक्तिगत रूप से, यह एक (सामान्य पर्याप्त) की तरह ध्वनि नहीं करता है। क्वेरी - जैसा कि आप स्वीकार करते हैं - बल्कि मूर्खतापूर्ण लगता है और एक समीक्षक को इसे समीक्षा में पास नहीं होने देना चाहिए, जब तक कि इसमें सुधार नहीं किया गया और अनावश्यक रूप से हटा दिया गया।
उस ने कहा, ऐसे ही सवाल हैं जहां उन्मूलन होता है। रोब फ़ार्ले द्वारा एक बहुत अच्छी संबंधित ब्लॉग पोस्ट है: SQL सर्वर में शामिल करें ।
हमारे मामले में, हम सभी को जोड़ों में बदलाव करने के लिए करना होगा LEFT
। Dbfiddle.uk देखें । इस मामले में आशावादी जानता है कि संभवतः परिणामों को बदलने के बिना सम्मिलित रूप से सुरक्षित रूप से हटाया जा सकता है। (सरलीकरण तर्क काफी सामान्य है और स्व-जोड़ों के लिए विशेष-आवरण नहीं है।)
पाठ्यक्रम की मूल क्वेरी में, जॉइन को हटाने INNER
से परिणाम या तो बदल नहीं सकते हैं। लेकिन यह प्राथमिक कुंजी पर स्वयं से जुड़ने के लिए बिल्कुल भी सामान्य नहीं है, इसलिए ऑप्टिमाइज़र के पास यह मामला लागू नहीं होता है। हालांकि इसमें शामिल होना आम है (या ज्वाइन लेफ्ट) जहां ज्वाइन किया गया कॉलम टेबल में से एक की प्राथमिक कुंजी है (और अक्सर एक विदेशी कुंजी बाधा होती है)। जो जुओं को खत्म करने के लिए एक दूसरा विकल्प देता है: एक जोड़ें (स्वयं संदर्भित) विदेशी कुंजी बाधा:
ALTER TABLE "Table"
ADD FOREIGN KEY (id) REFERENCES "Table" (id) ;
और वोइला, जोड़ ख़त्म हो जाते हैं! (एक ही बेला में परीक्षण): यहाँ
create table docs
(id int identity primary key,
doc varchar(64)
) ;
GO
✓
insert
into docs (doc)
values ('Enter one batch per field, don''t use ''GO''')
, ('Fields grow as you type')
, ('Use the [+] buttons to add more')
, ('See examples below for advanced usage')
;
GO
4 पंक्तियां प्रभावित
--------------------------------------------------------------------------------
-- Or use XML to see the visual representation, thanks to Justin Pealing and
-- his library: https://github.com/JustinPealing/html-query-plan
--------------------------------------------------------------------------------
set statistics xml on;
select d1.* from docs d1
join docs d2 on d2.id=d1.id
join docs d3 on d3.id=d1.id
join docs d4 on d4.id=d1.id;
set statistics xml off;
GO
आईडी | दस्तावेज़
-: | : ----------------------------------------
1 | प्रति फ़ील्ड एक बैच दर्ज करें, 'GO' का उपयोग न करें
2 | जैसे ही आप टाइप करते हैं फील्ड्स बढ़ने लगते हैं
3 | अधिक जोड़ने के लिए [+] बटन का उपयोग करें
4 | उन्नत उपयोग के लिए नीचे दिए गए उदाहरण देखें
--------------------------------------------------------------------------------
-- Or use XML to see the visual representation, thanks to Justin Pealing and
-- his library: https://github.com/JustinPealing/html-query-plan
--------------------------------------------------------------------------------
set statistics xml on;
select d1.* from docs d1
left join docs d2 on d2.id=d1.id
left join docs d3 on d3.id=d1.id
left join docs d4 on d4.id=d1.id;
set statistics xml off;
GO
आईडी | दस्तावेज़
-: | : ----------------------------------------
1 | प्रति फ़ील्ड एक बैच दर्ज करें, 'GO' का उपयोग न करें
2 | जैसे ही आप टाइप करते हैं फील्ड्स बढ़ने लगते हैं
3 | अधिक जोड़ने के लिए [+] बटन का उपयोग करें
4 | उन्नत उपयोग के लिए नीचे दिए गए उदाहरण देखें
alter table docs
add foreign key (id) references docs (id) ;
GO
✓
--------------------------------------------------------------------------------
-- Or use XML to see the visual representation, thanks to Justin Pealing and
-- his library: https://github.com/JustinPealing/html-query-plan
--------------------------------------------------------------------------------
set statistics xml on;
select d1.* from docs d1
join docs d2 on d2.id=d1.id
join docs d3 on d3.id=d1.id
join docs d4 on d4.id=d1.id;
set statistics xml off;
GO
आईडी | दस्तावेज़
-: | : ----------------------------------------
1 | प्रति फ़ील्ड एक बैच दर्ज करें, 'GO' का उपयोग न करें
2 | जैसे ही आप टाइप करते हैं फील्ड्स बढ़ने लगते हैं
3 | अधिक जोड़ने के लिए [+] बटन का उपयोग करें
4 | उन्नत उपयोग के लिए नीचे दिए गए उदाहरण देखें