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

माइनस का उपयोग करने के बजाय ओरेकल में दो कर्सर की तुलना करना

एक माइनस एक सेट ऑपरेशन है, जो दूसरी क्वेरी के परिणामों को पहले से दूर ले जाने के साथ-साथ डुप्लिकेट को भी हटा देगा यदि वे पहले सेट में दिखाई देते हैं। जैसे, दिखाई गई क्वेरी को हमेशा पूर्ण परिणाम सेट बनाना होगा इसे उपयोगकर्ता को वापस करने से पहले TABLE_1 से.

यदि आप सुनिश्चित हो सकते हैं कि पहले सेट में ट्रिमम हेड/प्रभावी तिथि के लिए कोई डुप्लीकेट नहीं हैं (या आप ऐसे डुप्लिकेट को हटाना नहीं चाहते हैं) तो आप कोशिश कर सकते हैं

SELECT  RTRIM(LTRIM(A.HEAD)), A.EFFECTIVE_DATE,
    FROM   TABLE_1 A
    WHERE  A.TYPE_OF_ACTION='6'
    AND    A.EFFECTIVE_DATE >= ADD_MONTHS(SYSDATE,-15)
    AND NOT EXISTS 
         (select 1 from table_2 b 
          where RTRIM(LTRIM(b.head)) = RTRIM(LTRIM(a.head))
          and b.effective_date = a.effective_date) )

इस तरह से क्वेरी बहुत तेज़ी से परिणाम लौटाना शुरू कर सकती है, खासकर यदि तालिका_2 बहुत छोटी है या पंक्तियों को प्रभावी_दिनांक या शीर्ष पर एक अनुक्रमणिका के माध्यम से एक्सेस किया जा सकता है।

पुनश्च. यदि आप कर सकते हैं, तो आरटीआरआईएम (एलटीआरआईएम ()) बिट्स को हटा दें।

पी.पी.एस. इसकी अभी भी कोई गारंटी नहीं है कि यह 8 सेकंड से कम समय में वापस आ जाएगी। यह इस बात पर निर्भर करेगा कि तालिका_1 कितनी बड़ी है, और type_of_action और/या प्रभावी_तिथि पर अनुक्रमणिका।

जोड़ा गया:

आप के माध्यम से कर्सर कर सकते हैं

SELECT  RTRIM(LTRIM(A.HEAD)), A.EFFECTIVE_DATE,
    FROM   TABLE_1 A
    WHERE  A.TYPE_OF_ACTION='6'
    AND    A.EFFECTIVE_DATE >= ADD_MONTHS(SYSDATE,-15)

और वापस आने पर पंक्तियों को अनदेखा करें

    select 1 from table_2 b 
      where RTRIM(LTRIM(b.head)) = :1
      and b.effective_date = :1
      and rownum =1

लेकिन इसे पूरी तरह से निष्पादित करने में निश्चित रूप से अधिक समय लगेगा। हो सकता है कि परिमाण के आदेश लंबे समय तक (अर्थात घंटे) निर्भर करते हैं कि प्रत्येक तालिका_2 में कितना समय लगता है। निश्चित नहीं है कि कटऑफ (कॉल की अवधि या खुले SQL कर्सर की अवधि) के लिए किस मानदंड का उपयोग किया जाता है, इसलिए यह बाहरी कर्सर को बंद कर सकता है। और तालिका_1 के आकार/सूचकांक/सामग्री के आधार पर, बाहरी कर्सर अभी भी पहली पंक्तियों को समय सीमा के भीतर वापस नहीं कर सकता है।

तालिका_1, तालिका_2 में कितनी पंक्तियाँ हैं और कौन-सी अनुक्रमणिकाएँ उपलब्ध हैं?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कॉलमटेक्स्ट को पंक्तियों में विभाजित करें (कोष्ठक में सीमांकक निकालें) ORACLE SQL

  2. SSMA का उपयोग करके Oracle से कनेक्ट करें

  3. परिभाषा पैरामीटर के रूप में Oracle varchar2 का अनिवार्य आकार क्यों है?

  4. ORA-00933 SQL कमांड ठीक से समाप्त नहीं हुआ लेकिन SQL डेवलपर में अच्छा है

  5. Oracle SQL to_date और to_timestamp ORA-01858:एक गैर-संख्यात्मक वर्ण पाया गया जहाँ एक संख्यात्मक अपेक्षित था और ORA-01850:घंटा 0 और 23 के बीच होना चाहिए