SELECT id FROM A LEFT OUTER JOIN B ON A.id=B.id WHERE B.id IS NULL
तुम यह केर सकते हो। बाहरी जुड़ाव थोड़ा प्रदर्शन लाना चाहिए, लेकिन ज्यादा नहीं।
नए डेटाबेस सिस्टम शायद आपकी क्वेरी को वैसे भी अनुकूलित करेंगे ताकि कोई अंतर न हो।
यहाँ सही तरीका कैशिंग है! यदि संभव हो तो क्वेरी कैशर और एप्लिकेशन स्तर कैशिंग का प्रयास करें।
बेशक आपको उचित अनुक्रमणिका की आवश्यकता है।
और उचित रूप से मेरा मतलब दोनों तालिकाओं और अधिमानतः एक हैश इंडेक्स पर है क्योंकि इसमें लॉगरिदमिक वाले किसी भी पेड़ की तुलना में स्थिर लुकअप समय होगा
यह देखने के लिए कि क्या वास्तव में इसे धीमा करता है, क्वेरी से पहले एक व्याख्या डालने का प्रयास करें।
यदि आपको वास्तव में तेज़ होने के लिए इसकी आवश्यकता है तो आप अपनी डेटा संरचना को फिर से तैयार कर सकते हैं।
आप संभवतः तालिका ए में ध्वज को चिह्नित करने के लिए एक ट्रिगर बना सकते हैं चाहे तालिका में संबंधित प्रविष्टि हो। बेशक यह आईडी डेटा अतिरेक है, लेकिन कभी-कभी इसके लायक है। बस इसे कैशिंग के रूप में सोचें।
एक आखिरी विचार:आप कोशिश कर सकते हैं SELECT id FROM A WHERE id NOT IN (SELECT id FROM B)
यह थोड़ा तेज़ हो सकता है क्योंकि कोई वास्तविक जुड़ाव आवश्यक नहीं है, हालाँकि यह धीमा भी हो सकता है क्योंकि be के सेट में लुकअप एक पूर्ण स्कैन होगा। मुझे वास्तव में यकीन नहीं है कि इसे कैसे संसाधित किया जाएगा लेकिन यह एक कोशिश के काबिल हो सकता है।