एक माइनस एक सेट ऑपरेशन है, जो दूसरी क्वेरी के परिणामों को पहले से दूर ले जाने के साथ-साथ डुप्लिकेट को भी हटा देगा यदि वे पहले सेट में दिखाई देते हैं। जैसे, दिखाई गई क्वेरी को हमेशा पूर्ण परिणाम सेट बनाना होगा इसे उपयोगकर्ता को वापस करने से पहले 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 में कितनी पंक्तियाँ हैं और कौन-सी अनुक्रमणिकाएँ उपलब्ध हैं?