सुनिश्चित करें कि आपने प्रत्येक टेस्ट रन के बीच निष्पादन + डेटा कैश साफ़ कर दिया है।
उदा.
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
यदि आप पहले यूनियन ऑल के साथ दौड़ते हैं, और फिर बाद में अलग-अलग 2 चयन चलाते हैं, तो डेटा पहले से ही मेमोरी बनाने के प्रदर्शन को बेहतर बनाने में कैश किया जाएगा (इसलिए यह गलत धारणा दे रहा है कि बाद का दृष्टिकोण तेज है जब यह नहीं हो सकता है)।पी>
यदि आपने यूनियन का उपयोग किया है तो यह धीमा हो सकता है क्योंकि इसे एक DISTINCT लागू करना है, लेकिन यूनियन सभी को ऐसा करने की ज़रूरत नहीं है, इसलिए यह अलग नहीं होना चाहिए।
अपडेट करें:
कार्यान्वयन योजनाओं पर एक नज़र डालें और उनकी तुलना करें - देखें कि क्या कोई अंतर है। आप क्वेरी चलाने से पहले SSMS में "वास्तविक निष्पादन योजना शामिल करें" बटन पर क्लिक करके निष्पादन योजना देख सकते हैं
अपडेट 2:
दिए गए पूर्ण सीटीई के आधार पर, मुझे लगता है कि मैं उन्हें अनुकूलित करने पर विचार कर रहा हूं - मुझे नहीं लगता कि यूनियन ऑल वास्तव में समस्या है।
आईएमएचओ, कोशिश करने के लिए सबसे अच्छी बात यह है कि सीटीई के माध्यम से एक-एक करके काम करें और प्रत्येक को अलग-अलग अनुकूलित करने का प्रयास करें ताकि जब आप उन सभी को मुख्य क्वेरी में जोड़ दें, तो वे बेहतर प्रदर्शन करते हैं।
जैसे tDictionaryStreets के लिए, इसे कैसे आजमाएं:
SELECT DISTINCT
r.KladrItemName AS RegionName,
a.KladrItemName AS AreaName,
c.KladrItemName AS CityName,
sc.KladrItemName AS SubCityName,
s.StreetName
FROM StreetNames s
JOIN tFoundStreets fs ON s.StreetName = fs.KladrItemName
LEFT JOIN tFoundRegions r ON s.RegionName = r.KladrItemName
LEFT JOIN tFoundAreas a ON s.AreaName = a.KladrItemName
LEFT JOIN tFoundCities c ON s.CityName = c.KladrItemName
LEFT JOIN tFoundSubCities sc ON s.SubCityName = scc.KladrItemName
प्रत्येक टेबल पर KladrItemName पर कम से कम एक इंडेक्स होना चाहिए। tDictionarySubCities को उसी तरह से जोड़ने का प्रयास करें।