कहो, हमारे पास इस तरह एक प्रश्न है:
select a.*,b.*
from
a join b
on a.col1=b.col1
and len(a.col1)=10
उपर्युक्त क्वेरी को मानने से हैश ज्वाइन का उपयोग होता है और इसमें एक अवशिष्ट होता है, जांच कुंजी होगी col1
और अवशिष्ट होगा len(a.col1)=10
।
लेकिन एक अन्य उदाहरण से गुजरते हुए, मैं जांच और अवशिष्ट दोनों को एक ही स्तंभ के रूप में देख सकता था। नीचे मैं क्या कहने की कोशिश कर रहा हूँ पर एक विस्तार है:
प्रश्न:
select *
from T1 join T2 on T1.a = T2.a
निष्पादन और अवशिष्ट के साथ निष्पादन योजना:
परीक्षण डेटा:
create table T1 (a int, b int, x char(200))
create table T2 (a int, b int, x char(200))
set nocount on
declare @i int
set @i = 0
while @i < 1000
begin
insert T1 values (@i * 2, @i * 5, @i)
set @i = @i + 1
end
declare @i int
set @i = 0
while @i < 10000
begin
insert T2 values (@i * 3, @i * 7, @i)
set @i = @i + 1
end
सवाल:
एक जाँच और अवशिष्ट एक ही स्तंभ कैसे हो सकते हैं? SQL सर्वर केवल जांच कॉलम का उपयोग क्यों नहीं कर सकता है? फिर से पंक्तियों को फ़िल्टर करने के लिए अवशिष्ट के रूप में उसी कॉलम का उपयोग क्यों करना पड़ता है?
परीक्षण डेटा के लिए संदर्भ: