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

SQL सर्वर में बहुत बड़ी तालिकाओं का अद्यतन या विलय

वास्तव में मुझे ऐसे प्रश्नों के लिए सामान्य अनुशंसाएँ मिली हैं:SQL मर्ज या अपडेट का उपयोग करने का विचार बहुत ही चतुर है लेकिन यह तब विफल हो जाता है जब हमें कई रिकॉर्ड अपडेट करने की आवश्यकता होती है (यानी 75M ) एक बड़ी और चौड़ी टेबल में (यानी 240M )

नीचे दी गई क्वेरी की क्वेरी योजना को देखते हुए हम कह सकते हैं कि TABLE SCAN TABLE1 का और अंतिम MERGE 90% समय ले रहे हैं।

MERGE TABLE1 as Target  
USING UTABLE as source  
ON Target.record_id = source.record_id   
WHEN MATCHED AND (condition) THEN   
    UPDATE SET Target.columns=source.columns

इसलिए MERGE का उपयोग करने के लिए हमें यह करना होगा:

  1. उन पंक्तियों की संख्या कम करें जिन्हें हमें अद्यतन करने की आवश्यकता है और इस जानकारी को SQL सर्वर को सही ढंग से पास करें। यह UTABLE . बनाकर किया जा सकता है छोटा या अतिरिक्त निर्दिष्ट करना condition जो विलय के लिए अंश को संकुचित करता है।
  2. सुनिश्चित करें कि मर्ज किया जाने वाला हिस्सा मेमोरी में फिट बैठता है अन्यथा क्वेरी धीमी गति से चलती है। TABLE1 बनाना मेरे वास्तविक क्वेरी समय को दो बार कम करके 11 घंटे से 40 मिनट कर दिया।

जैसा कि मार्क ने उल्लेख किया है कि आप UPDATE . का उपयोग कर सकते हैं सिंटैक्स और WHERE . का उपयोग करें विलय करने के लिए संकीर्ण भाग के खंड - यह वही परिणाम देगा। इसके अलावा कृपया TABLE1 को अनुक्रमित करने से बचें क्योंकि इससे MERGE . के दौरान अनुक्रमणिका के पुनर्निर्माण के लिए अतिरिक्त कार्य होगा



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. I/O त्रुटि:SSO विफल:मूल SSPI लाइब्रेरी लोड नहीं हुई

  2. 2017 से पहले SQL सर्वर में एक स्ट्रिंग को कैसे ट्रिम करें?

  3. अदिश चर घोषित करना चाहिए

  4. 'केवल पढ़ने के लिए' डेटाबेस को छोटा नहीं कर सकता | ऑलवेजऑन अवेलेबिलिटी ग्रुप का उपयोग करते हुए ट्रांजेक्शन लॉग को सिकोड़ें

  5. AdventureWorks2008.msi कहाँ से डाउनलोड करें?