Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल सर्वर क्वेरी में यूनियन सभी बनाम या स्थिति

समस्या यह है कि आप OR के साथ दो शर्तें निर्दिष्ट कर रहे हैं जो आपकी क्वेरी में अलग-अलग तालिकाओं पर लागू होती हैं। इस वजह से, गैर-संकुल अनुक्रमणिका खोज को आपकी बड़ी तालिका में अधिकांश या सभी पंक्तियों को वापस करना होगा क्योंकि OR तर्क का अर्थ है कि वे दूसरी तालिका में स्थिति खंड से भी मेल खा सकते हैं।

उपरोक्त तीनों उदाहरणों में SQL निष्पादन योजना को देखें, और ध्यान दें कि बड़ी तालिका से गैर-संकुलित अनुक्रमणिका से निकलने वाली पंक्तियों की संख्या। अंतिम परिणाम तालिका में 800,000 पंक्तियों में से केवल 1,000 या उससे कम लौटा सकता है, लेकिन OR खंड का अर्थ है कि उस तालिका की सामग्री को दूसरी तालिका में सशर्त के साथ क्रॉस-रेफ़र किया जाना है या इसका अर्थ है कि उन्हें अंतिम के लिए आवश्यक हो सकता है क्वेरी आउटपुट।

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

मुझे लगता है कि इसका मतलब बनता है। धीमी गति से चलने वाले SQL कथनों को पुन:सक्रिय करते हुए मैंने उसी स्थिति में भाग लिया है।

चीयर्स,

आंद्रे रानिएरी



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA SQL सर्वर JDBC प्रकार के लिए कोई बोली मानचित्रण नहीं:-9

  2. SQL सर्वर 2005 ROW_NUMBER () बिना ORDER BY

  3. एसक्यूएल 2005 में पिवोट

  4. SQL सर्वर लॉग शिपिंग और डिजास्टर रिकवरी इंस्टाल और कॉन्फ़िगरेशन -2

  5. निर्यात संग्रहीत कार्यविधि परिणाम SSMS में Excel में सेट किया गया है