एसक्यूएल के साथ हमेशा की तरह, वास्तविक स्कीमा को जानने के बिना क्वेरी काफी हद तक अप्रासंगिक है।
क्या आपके पास सदस्यों पर एक अनुक्रमणिका है।फ़ोन? यदि नहीं, तो इससे कोई फर्क नहीं पड़ता कि आप क्वेरी कैसे लिखते हैं, वे सभी पूरी तालिका को स्कैन करेंगे और वही प्रदर्शन करेंगे (यानी खराब प्रदर्शन)। यदि आपके पास एक अनुक्रमणिका है फिर जिस तरह से आप क्वेरी लिखते हैं, उससे बहुत फर्क पड़ता है:
SELECT * FROM Members WHERE Phone= @Phone;
SELECT * FROM Members WHERE Phone= dbo.FormatPhone(@Phone);
SELECT * FROM Members WHERE dbo.FormatPhone(Phone)[email protected];
पहली क्वेरी की गारंटी इष्टतम है, इंडेक्स पर फोन की तलाश करेगी।
दूसरी क्वेरी dbo.FormatPhone की विशेषताओं पर निर्भर करती है। यह एक इष्टतम खोज का उपयोग कर सकता है या नहीं भी कर सकता है।
आखिरी क्वेरी खराब होने की गारंटी है। तालिका स्कैन करेगा।
साथ ही, मैंने NOLOCK संकेत हटा दिया, यह दिन का विषय प्रतीत होता है... देखें एसक्यूएल में नोलॉक के लिए सिंटैक्स . NOLOCK हमेशा है गलत उत्तर। स्नैपशॉट अलगाव का उपयोग करें।