नहीं, गणना दो बार नहीं की जाएगी यदि इसे ठीक उसी तरह लिखा गया हो। हालाँकि यदि आपका उद्देश्य अपने आवेदन के प्रदर्शन में सुधार करना है तो आप इस मामूली विवरण पर ध्यान केंद्रित करने के बजाय बड़ी तस्वीर देखना चाहेंगे जो आपको दो अंतर का कारक दे सकता है। एक अधिक गंभीर समस्या यह है कि आपकी क्वेरी अनुक्रमणिका के कुशल उपयोग को रोकती है और इसका परिणाम पूर्ण स्कैन में होगा।
मेरा सुझाव है कि आप अपना डेटाबेस बदलें ताकि आप ज्यामिति के प्रकार का उपयोग करें और एक स्थानिक अनुक्रमणिका आपके डेटा पर। फिर आप MBRWithinका उपयोग कर सकते हैं। ए> अपने सर्कल के बाउंडिंग बॉक्स के अंदर स्थित बिंदुओं को जल्दी से खोजने के लिए। एक बार जब आप उन बिंदुओं को पा लेते हैं, तो आप केवल उन्हीं बिंदुओं पर अपनी अधिक महंगी दूरी की परीक्षा चला सकते हैं। यदि आपकी तालिका बड़ी है और एक सामान्य खोज पंक्तियों का केवल एक छोटा अंश लौटाती है तो यह दृष्टिकोण काफी तेज़ होगा।
यदि आप डेटा मॉडल को नहीं बदल सकते हैं, तब भी आप पहले बाउंडिंग बॉक्स चेक का उपयोग करके प्रदर्शन में सुधार कर सकते हैं, उदाहरण के लिए WHERE x BETWEEN 10 AND 20 AND y BETWEEN 50 AND 60
. बाउंडिंग बॉक्स चेक एक इंडेक्स का उपयोग करने में सक्षम होगा, लेकिन क्योंकि आर-ट्री इंडेक्स केवल ज्यामिति प्रकार पर समर्थित हैं, आपको मानक बी-ट्री इंडेक्स का उपयोग करना होगा जो इस प्रकार की क्वेरी के लिए उतना कुशल नहीं है (लेकिन अभी भी बहुत कुछ आप वर्तमान में जो कर रहे हैं उससे बेहतर)।